package org.freehep.webutil.filter; import java.io.IOException; import java.util.ArrayList; import java.util.StringTokenizer; 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; /** * This filter saves specified request parameters in the session. * You need to specify "attributeList" as init-param in the * declaration of the filter. The value of the parameter is * a comma separated list of attributes that need cashing. */ public class RequestParameterCashFilter implements Filter { private static String parameterName = "attributeList"; private FilterConfig filterConfig = null; private String[] attributeList; public RequestParameterCashFilter() { } public String getAttributeList() { if (attributeList == null) return null; String tmp = ""; for (int i=0; i<attributeList.length; i++) tmp += ", "+attributeList[i]; return tmp; } public void setAttributeList(String list) { if (list == null || list.trim().equals("")) attributeList = null; else { if (list.indexOf(",") < 0) { attributeList = new String[] { list }; } else { StringTokenizer st = new StringTokenizer(list, ","); ArrayList al = new ArrayList(st.countTokens()); while (st.hasMoreTokens()) { al.add(st.nextToken().trim()); } attributeList = new String[al.size()]; attributeList = (String[]) al.toArray(attributeList); } } } public void init(FilterConfig filterConfig) throws ServletException { this.filterConfig = filterConfig; setAttributeList(filterConfig.getInitParameter(parameterName)); } public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException { HttpServletRequest httpRequest = null; HttpServletResponse httpResponse = null; if (attributeList != null) { if (servletRequest instanceof HttpServletRequest && servletResponse instanceof HttpServletResponse) { httpRequest = (HttpServletRequest) servletRequest; httpResponse = (HttpServletResponse) servletResponse; for (int i=0; i<attributeList.length; i++) { String par = servletRequest.getParameter(attributeList[i]); httpRequest.getSession().setAttribute(attributeList[i], par); } } } filterChain.doFilter(servletRequest, servletResponse); } public void destroy() { filterConfig = null; } }