If you're using Servlet 2.4 (such as Tomcat 5.x or later), you can configure a filter to be applied on RequestDispatcher.forward() and RequestDispatcher.include() calls, as well as on the original request. See the docs for the revised <filter-mapping> element. If you are on Servlet 2.3, there is no solution to getting filters invoked on RD calls -- it is not supported.
Craig On Sat, 04 Dec 2004 22:59:23 +0000, Brij Naald <[EMAIL PROTECTED]> wrote: > thanks for the help, > But the problem remains. The SecurityFilter will put a wrapper around the > request, but my filter also wants to set some attributes (the lastServlet) > right. > > Example: > Assume that you type in /servlet1 in your browser. In that case the filter > will get called, it will put the wrapper around the request, and then > forward the control to servlet1. > > But if servlet1 contains the code: > RequestDispatcher dispatcher = > getServletContext().getRequestDispatcher("/servlet2"); > dispatcher.include(request, response); > > Then the filter will not be called again, and the control will be passed > directly to servlet2 > > That way, my application will not get the update that servlet2 is called. > > Do you see a solution for this? > > Thanks a lot already! > > ----------------------------------------- > > > Brij, > > I think I saw a usable filter solution when reading through the code of > Security Filter. If I recall correctly, their filter code uses the > HttpServletRequestWrapper class and adds their own getUserPrincipal() > orverloading method. Surely you could do the same with your > getServletPath() by overriding it in a subclass of > HttpServletRequestWrapper. > > The Java code this model is class > org.securityfilter.filter.SecurityRequestWrapper in CVS at: > http://cvs.sourceforge.net/viewcvs.py/securityfilter/securityfilter/src/shar > e/org/securityfilter/filter/SecurityRequestWrapper.java?rev=1.9&view=auto > > To implement the HttpServletRequestWrapper subclass within a filter, see > org.securityfilter.filter.SecurityFilter in CVS at: > http://cvs.sourceforge.net/viewcvs.py/securityfilter/securityfilter/src/shar > e/org/securityfilter/filter/SecurityFilter.java?rev=1.23&view=auto > > Regards, > David > > -----Original Message----- > From: Brij Naald [mailto:[EMAIL PROTECTED] > Sent: Saturday, December 04, 2004 3:53 PM > To: [EMAIL PROTECTED] > Subject: RE: Filter/... > > My application needs to know the path of the servlet which is going to be > called. > Therefore the filter does: > > setLastServlet(((HttpServletRequest)request).getServletPath()); > > and then the filter invokes the servlet wtih a wrapper around its request > > The wrapper overrides the > public Object getAttribute(String name) > > and only gives access to the attribute with name 'name' if the servlet which > is called has the right path for that attribute. Therefore the wrapper needs > to now the 'LastServlet'. > > (So the problem is that the filter is only invoked at the beginning of the > request. When a servlet does dispatcher.include, the setLastServlet of the > filter won't be called anymore, and the "LastServlet" isn't the correct one > anymore) > > -------------------------- > >Interesting issue. Anyway, can't think of anything that solves it in a > >clean > >way. > > > >If you give me (if you can) further information about what your filter > >does, > >I could give it a try at thinking about an alternative solution. > > > >Cheers, > > > >F. > > _________________________________________________________________ > Koop geen kat in een zak. Probeer alles 14 dagen bij jou thuis. > http://linkstat.neckermann.de/go.mb1?benl_11294 > > --------------------------------------------------------------------- > To unsubscribe, e-mail: [EMAIL PROTECTED] > For additional commands, e-mail: [EMAIL PROTECTED] > > --------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]