Monday, January 19, 2015

Prestruts filter


import java.io.IOException;

import net.mycom.myapp.misc.myappProperties;

import org.apache.log4j.Logger;
import org.apache.log4j.MDC;
import org.apache.struts2.dispatcher.ng.filter.*;

import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class PreStrutsFilter  implememycom Filter {
 private static Logger logger = Logger.getLogger(PreStrutsFilter.class);
 
 Filter strutsFilter = new StrutsPrepareAndExecuteFilter();
 private String bypassStrutsExp;
 private String bypassStrutsExpMobile;
 private String bypassVaadin;
 private ServletContext ctx;

 @Override
    public void destroy() {
  strutsFilter.destroy();    
    }

 @Override
    public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain) throws IOException, ServletException {
  if(req instanceof HttpServletRequest){
   HttpServletRequest httpReq = (HttpServletRequest)req;
   String uri = httpReq.getRequestURI();
   
   String ctxRoot = this.ctx.getContextPath();
   uri = uri.replace(ctxRoot, "");
   
   if(!uri.matches(bypassStrutsExp) &&
      !uri.matches(bypassStrutsExpMobile) &&
      !uri.matches(bypassVaadin)
      ){
    
    // Browser cache images
    int dot = uri.lastIndexOf(".");
    if ((dot > 0) &&
        (uri.substring(dot).equalsIgnoreCase(".jpg") ||
         uri.substring(dot).equalsIgnoreCase(".jpeg") ||
         uri.substring(dot).equalsIgnoreCase(".gif") ||
         uri.substring(dot).equalsIgnoreCase(".png"))) {
     try {
      ((HttpServletResponse)res).setHeader("Cache-Control", "max-age=" + myappProperties.getCacheControlMaxAge());
     }
     catch (Exception e) {
      ((HttpServletResponse)res).setHeader("Cache-Control", "max-age=120");
      logger.error("Error retrieving cacheControlMaxAge", e);
     }
    }
    
    putMDC(httpReq); // Log user
    strutsFilter.doFilter(req, res, chain);
    MDC.clear(); // Remove from Mapped Diagnostic Context
   }
   else{
    chain.doFilter(req, res);
   }
  }
  else{
   chain.doFilter(req, res);
  }
    }

 @Override
    public void init(FilterConfig cfg) throws ServletException {
  strutsFilter.init(cfg);
  this.bypassStrutsExp = cfg.getInitParameter("struts_bypass_expression");
  this.bypassStrutsExpMobile = cfg.getInitParameter("struts_bypass_expression_mobile");
  this.bypassVaadin = cfg.getInitParameter("struts_bypass_vaadin");
  this.ctx = cfg.getServletContext();
    }
 
 private void putMDC(HttpServletRequest request) {
  Long accountId = (Long)request.getSession().getAttribute("accountId");
  String sessionId = request.getSession().getId();
  
  // If parameter exist put into Mapped Diagnostic Context
  if (accountId != null) { MDC.put("accountId", accountId); }
  if (sessionId != null) { MDC.put("sessionId", sessionId); }
 }
}

No comments:

Post a Comment