From af24a20257f4958ef5335d471a7fe2c93f475a35 Mon Sep 17 00:00:00 2001 From: mcentner Date: Wed, 28 Jul 2010 09:05:04 +0000 Subject: Resolved issue [#MOCCA-745] (Two simultaneous requests within the same session cause failure in both requests). git-svn-id: https://joinup.ec.europa.eu/svn/mocca/trunk@790 8a26b1a7-26f0-462f-b9ef-d0e30c41f5a4 --- .../bku/online/webapp/TransactionIdFilter.java | 78 ++++++++++++++++++++++ 1 file changed, 78 insertions(+) create mode 100644 BKUOnline/src/main/java/at/gv/egiz/bku/online/webapp/TransactionIdFilter.java (limited to 'BKUOnline/src/main/java/at/gv/egiz/bku/online/webapp/TransactionIdFilter.java') diff --git a/BKUOnline/src/main/java/at/gv/egiz/bku/online/webapp/TransactionIdFilter.java b/BKUOnline/src/main/java/at/gv/egiz/bku/online/webapp/TransactionIdFilter.java new file mode 100644 index 00000000..3ae41707 --- /dev/null +++ b/BKUOnline/src/main/java/at/gv/egiz/bku/online/webapp/TransactionIdFilter.java @@ -0,0 +1,78 @@ +package at.gv.egiz.bku.online.webapp; + +import java.io.IOException; + +import javax.servlet.Filter; +import javax.servlet.FilterChain; +import javax.servlet.FilterConfig; +import javax.servlet.ServletException; +import javax.servlet.ServletRequest; +import javax.servlet.ServletResponse; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import javax.servlet.http.HttpSession; + +import org.slf4j.MDC; + +import at.gv.egiz.bku.binding.Id; +import at.gv.egiz.bku.binding.IdFactory; + +/** + * Servlet Filter implementation class BindingProcessorFilter + */ +public class TransactionIdFilter implements Filter { + + /** + * @see Filter#destroy() + */ + public void destroy() { + } + + /** + * @see Filter#doFilter(ServletRequest, ServletResponse, FilterChain) + */ + public void doFilter(ServletRequest request, ServletResponse response, + FilterChain chain) throws IOException, ServletException { + + if (request instanceof HttpServletRequest) { + HttpSession session = ((HttpServletRequest) request).getSession(); + + String tidx = null; + // We expect the transaction index parameter to appear in GET requests only + if ("GET".equals(((HttpServletRequest) request).getMethod())) { + tidx = request.getParameter("tidx"); + } + + if (tidx == null) { + TransactionId transactionIndex = (TransactionId) session + .getAttribute(TransactionId.TRANSACTION_INDEX); + if (transactionIndex != null) { + tidx = Integer.toString(transactionIndex.next()); + } else { + tidx = "0"; + } + } + + Id id = IdFactory.getInstance().createId(session.getId() + "-" + tidx); + MDC.put("id", id.toString()); + request.setAttribute("id", id); + + response = new TransactionIdResponseWrapper((HttpServletResponse) response, session.getId(), tidx); + } + + // pass the request along the filter chain + try { + chain.doFilter(request, response); + } finally { + MDC.remove("id"); + } + + } + + /** + * @see Filter#init(FilterConfig) + */ + public void init(FilterConfig fConfig) throws ServletException { + } + +} -- cgit v1.2.3