1 23 package org.infoglue.deliver.applications.filters; 24 25 import java.io.IOException ; 26 import java.net.URLDecoder ; 27 import java.util.ArrayList ; 28 import java.util.List ; 29 import java.util.StringTokenizer ; 30 31 import javax.servlet.Filter ; 32 import javax.servlet.FilterChain ; 33 import javax.servlet.FilterConfig ; 34 import javax.servlet.ServletException ; 35 import javax.servlet.ServletRequest ; 36 import javax.servlet.ServletResponse ; 37 import javax.servlet.http.HttpServletRequest ; 38 import javax.servlet.http.HttpServletResponse ; 39 40 import org.apache.commons.logging.Log; 41 import org.apache.commons.logging.LogFactory; 42 import org.infoglue.cms.util.CmsPropertyHandler; 43 44 48 public class PortalParameterFilter implements Filter 49 { 50 private static final Log log = LogFactory.getLog(PortalParameterFilter.class); 51 52 private static String FILTER_URIS_PARAMETER = "FilterURIs"; 53 54 private FilterConfig filterConfig = null; 55 private URIMatcher uriMatcher = null; 56 57 private boolean active = true; 58 59 62 public void init(FilterConfig filterConfig) throws ServletException 63 { 64 String portalEnabled = CmsPropertyHandler.getEnablePortal(); 65 active = ((active) && (portalEnabled != null) && portalEnabled.equalsIgnoreCase("true")); 66 67 this.filterConfig = filterConfig; 68 String filterURIs = filterConfig.getInitParameter(FILTER_URIS_PARAMETER); 69 uriMatcher = URIMatcher.compilePatterns(splitString(filterURIs, ","), false); 70 71 log.info("PortalParameterFilter is active: " + active); 72 } 73 74 77 78 public void doFilter(ServletRequest req, ServletResponse resp, FilterChain chain) throws IOException , ServletException 79 { 80 HttpServletRequest httpRequest = (HttpServletRequest )req; 81 HttpServletResponse httpResponse = (HttpServletResponse )resp; 82 83 if (active) 84 { 85 String requestURI = URLDecoder.decode(getContextRelativeURI(httpRequest), "UTF-8"); 86 87 if (!uriMatcher.matches(requestURI)) 88 { 89 log.debug("wrapping " + ((HttpServletRequest ) req).getRequestURI()); 90 chain.doFilter(new PortalServletRequest((HttpServletRequest ) req), resp); 91 } 92 else 93 chain.doFilter(req, resp); 94 } 95 else 96 { 97 chain.doFilter(req, resp); 98 } 99 } 100 101 104 public void destroy() 105 { 106 107 } 108 109 110 private String getContextRelativeURI(HttpServletRequest request) 111 { 112 String requestURI = request.getRequestURI(); 113 String contextPath = request.getContextPath(); 114 if (contextPath != null && requestURI.length() > 0) 115 { 116 requestURI = requestURI.substring(contextPath.length(), requestURI.length()); 117 } 118 119 if (requestURI.length() == 0) 120 return "/"; 121 122 return requestURI; 123 } 124 125 private String [] splitString(String str, String delimiter) 126 { 127 List list = new ArrayList (); 128 StringTokenizer st = new StringTokenizer (str, delimiter); 129 while (st.hasMoreTokens()) 130 { 131 String t = st.nextToken(); 133 if (t.startsWith("_")) 134 { 135 break; 136 } 137 else 138 { 139 list.add(t.trim()); 141 } 142 } 143 return (String []) list.toArray(new String [list.size()]); 144 } 145 146 } 147 | Popular Tags |