summaryrefslogtreecommitdiff
path: root/BKUOnline/src/main/java/at/gv/egiz/bku/online/webapp/TransactionIdFilter.java
diff options
context:
space:
mode:
Diffstat (limited to 'BKUOnline/src/main/java/at/gv/egiz/bku/online/webapp/TransactionIdFilter.java')
-rw-r--r--BKUOnline/src/main/java/at/gv/egiz/bku/online/webapp/TransactionIdFilter.java78
1 files changed, 78 insertions, 0 deletions
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 {
+ }
+
+}