Thanks a lot for the example, Gregor. The filter I am working on needs to change the content of response, so I think I need to write customized ServletResponseWrapper and ServletOutputStream. And this is where I encountered the problem, the customized filter I wrote does not behavior as it says on those websites where I found examples. I am not sure whether or not Tomcat has its own way to implement Servlet Spec. -Ben
On Mon, Mar 9, 2009 at 1:56 PM, Gregor Schneider <rc4...@googlemail.com>wrote: > To give you a start, a small real-world-example: > > package com.cr.manuals.filter; > > import java.text.SimpleDateFormat; > import java.util.Calendar; > import java.util.Date; > import java.util.Locale; > > import javax.servlet.FilterChain; > import javax.servlet.FilterConfig; > import javax.servlet.ServletException; > import javax.servlet.ServletRequest; > import javax.servlet.ServletResponse; > import javax.servlet.http.Cookie; > import javax.servlet.http.HttpServletRequest; > import javax.servlet.http.HttpServletResponse; > > /** > * Servlet implementation class for Servlet: HeaderFilter > * > */ > public class HeaderFilter implements javax.servlet.Filter { > > private static String PARAM_ADD_TO_CURRENT_MONTH = > "ADD_TO_CURRENT_MONTH"; > private FilterConfig filterConfig = null; > private int months2Add = 0; > /* (non-Java-doc) > * @see javax.servlet.http.HttpServlet#HttpServlet() > */ > public HeaderFilter() { > super(); > } > > /** > * init() : init() method called when the filter is instantiated. > * This filter is instantiated the first time j_security_check is > * invoked for the application (When a protected servlet in the > * application is accessed). > */ > public void init(FilterConfig aFilterConfig) throws ServletException > { > filterConfig = aFilterConfig; > months2Add = > Integer.parseInt(filterConfig.getInitParameter(PARAM_ADD_TO_CURRENT_MONTH)); > } > > /** > * destroy() : destroy() method called when the filter is taken > * out of service. > */ > public void destroy() { > filterConfig = null; > } > > /** > * doFilter() : doFilter() method called before the servlet to > * which this filteris mapped is invoked. Since this filter is > * mapped to j_security_check,this method is called before > * j_security_check action is posted. > */ > public void doFilter(ServletRequest aRequest, ServletResponse > aResponse, > FilterChain chain) throws > java.io.IOException, ServletException { > > //System.out.println ("******** filter *******"); > > HttpServletRequest request = (HttpServletRequest)aRequest; > HttpServletResponse response = (HttpServletResponse)aResponse; > // call next filter in the chain : let j_security_check > authenticate > // user > response.setHeader("Expires", > createExpiresHeader(months2Add)); > chain.doFilter(request, response); > > } > /** > * Create a String in the format EEE, d MMM yyyy HH:mm:ss z" > * Example: Fri, 4 Aug 2006 09:07:44 CEST > * The value of the init-parama ADD_TO_CURRENT_MONTH is added to the > * month-field of the current date > * @return > */ > private String createExpiresHeader(int someMonths2Add) { > SimpleDateFormat sdf = new SimpleDateFormat("EEE, d MMM yyyy > HH:mm:ss z", Locale.US); > Calendar cal = Calendar.getInstance(); > cal.add(Calendar.MONTH, someMonths2Add); > long millis = cal.getTimeInMillis(); > Date d = new Date(millis); > return sdf.format(d); > } > } > > In your web.xml: > > <filter id="Filter_1"> > <filter-name>HeaderFilter</filter-name> > > <filter-class>com.cr.manuals.filter.HeaderFilter</filter-class> > <init-param> > <param-name>ADD_TO_CURRENT_MONTH</param-name> > <param-value>1</param-value> > </init-param> > </filter> > <filter-mapping> > <filter-name>HeaderFilter</filter-name> > <url-pattern>/*</url-pattern> > </filter-mapping> > > HTH > > Gregor > -- > just because your paranoid, doesn't mean they're not after you... > gpgp-fp: 79A84FA526807026795E4209D3B3FE028B3170B2 > gpgp-key available @ http://pgpkeys.pca.dfn.de:11371 > > --------------------------------------------------------------------- > To unsubscribe, e-mail: users-unsubscr...@tomcat.apache.org > For additional commands, e-mail: users-h...@tomcat.apache.org > >