1 23 24 package org.infoglue.deliver.applications.filters; 25 26 import java.io.IOException ; 27 import java.net.URLDecoder ; 28 import java.util.ArrayList ; 29 import java.util.Enumeration ; 30 import java.util.List ; 31 import java.util.StringTokenizer ; 32 33 import javax.servlet.Filter ; 34 import javax.servlet.FilterChain ; 35 import javax.servlet.FilterConfig ; 36 import javax.servlet.ServletException ; 37 import javax.servlet.ServletRequest ; 38 import javax.servlet.ServletResponse ; 39 import javax.servlet.http.HttpServletRequest ; 40 import javax.servlet.http.HttpServletResponse ; 41 42 import org.apache.log4j.Logger; 43 import org.infoglue.deliver.util.CacheController; 44 45 50 51 public class CacheEvictionFilter implements Filter 52 { 53 public final static Logger logger = Logger.getLogger(CacheEvictionFilter.class.getName()); 54 55 private static String FILTER_URIS_PARAMETER = "FilterURIs"; 56 57 private FilterConfig filterConfig = null; 58 private URIMatcher uriMatcher = null; 59 60 public void init(FilterConfig filterConfig) throws ServletException 61 { 62 this.filterConfig = filterConfig; 63 String filterURIs = filterConfig.getInitParameter(FILTER_URIS_PARAMETER); 64 uriMatcher = URIMatcher.compilePatterns(splitString(filterURIs, ","), false); 65 } 66 67 public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException , ServletException 68 { 69 HttpServletRequest httpRequest = (HttpServletRequest ) servletRequest; 70 HttpServletResponse httpResponse = (HttpServletResponse ) servletResponse; 71 72 try 73 { 74 String requestURI = URLDecoder.decode(getContextRelativeURI(httpRequest), "UTF-8"); 75 String userAgent = httpRequest.getHeader("user-agent"); 76 if(userAgent != null) 77 userAgent = userAgent.toLowerCase(); 78 79 if(logger.isInfoEnabled()) 80 logger.info("userAgent:" + userAgent); 81 82 if (!uriMatcher.matches(requestURI) && userAgent != null && userAgent.indexOf("java") == -1 && userAgent.indexOf("axis") == -1) 83 { 84 CacheController.evictWaitingCache(); 85 } 86 } 87 catch (Exception e) 88 { 89 logger.error("CacheEvictionFilter threw error:" + e.getMessage(), e); 90 } 91 92 filterChain.doFilter(httpRequest, httpResponse); 93 } 94 95 public void destroy() 96 { 97 } 98 99 private String getContextRelativeURI(HttpServletRequest request) 100 { 101 String requestURI = request.getRequestURI(); 102 String contextPath = request.getContextPath(); 103 if (contextPath != null && requestURI.length() > 0) 104 { 105 requestURI = requestURI.substring(contextPath.length(), requestURI.length()); 106 } 107 108 if (requestURI.length() == 0) 109 return "/"; 110 111 return requestURI; 112 } 113 114 private String [] splitString(String str, String delimiter) 115 { 116 List list = new ArrayList (); 117 StringTokenizer st = new StringTokenizer (str, delimiter); 118 while (st.hasMoreTokens()) 119 { 120 String t = st.nextToken(); 122 if (t.startsWith("_")) 123 { 124 break; 125 } 126 else 127 { 128 list.add(t.trim()); 130 } 131 } 132 return (String []) list.toArray(new String [list.size()]); 133 } 134 135 } | Popular Tags |