programmatical addition or removal of filters prior to wicket filter request
handling
-------------------------------------------------------------------------------------
Key: WICKET-3219
URL: https://issues.apache.org/jira/browse/WICKET-3219
Project: Wicket
Issue Type: New Feature
Reporter: Peter Ertl
Assignee: Peter Ertl
Fix For: 1.5-M4
Attachments: filter-extension.patch
[full-working patch included]
I would like to extend WicketFilter so you can add (or remove) standard servlet
filters programatically to it. These will filter the request prior to wicket
using Filter#doChain(). At the end of the filter chain wicket itself will
process the request.
Usually the wicket request handling looks like this:
incoming browser request ->
begin WicketFilter#doFilter ->
wicket request processing ->
end WicketFilter#doFilter ->
send response to browser
Now when adding standard java.servlet.Filter instances to the WicketFilter
using something like
--- sample code ---
public class MyApplication extends WebApplication
{
@Override
protected void init()
{
super.init();
XForwardFilter filter = new XForwardFilter(); // transparent
proxy handling behind front-end proxies
try
{
getWicketFilter().addInterceptor(filter);
////////// getWicketFilter().addInterceptor(filter,
config); // alternate config (e.g. mock filter config since FilterConfig is
just an interface)
}
catch (ServletException e)
{
// standard exception which can be thrown from
javax.servlet.Filter#init(FilterConfig)
log.error(e.getMessage(), e);
}
}
--- EOF sample code ---
the processing will change like that:
incoming browser request ->
begin WicketFilter#doFilter ->
begin XForwardFilter#doFilter() ->
XForwardFilter processing ->
chain.doFilter(request,response) ->
invoke wicket request processing ->
end XForwardFilter#doFilter() ->
end WicketFilter#doFilter ->
send response to browser
- The filter (= interceptor) will be invoked for the same filter path
WicketFilter is configured
Being able to add filters like this will have the following advantages:
- The filter can be added or removed anytime during the wicket application
lifecycle
- You don't have to touch web.xml ever
- You can specify mock filter configs or alternate filter configs using
(WicketFilter#addInterceptor(filter, alternateFilterConfig))
- Tigher integration of the filter with wicket since the application and
session is already attached to the current thread context (similar to
WicketSessionFilter, but without web.xml fiddling)
- Plugins can add filters without requiring any manual intervention by the
developer, this will make them more powerful
- Filters can be removed thread-safe at runtime
- Low-level request processing is really simple and requests or responses can
be wrapped using HttpServletRequestWrapper and HttpServletResponseWrapper
- the filter class can not be invalid (<filter-class> in web.xml) since it's
checked by the compiler
- Eventually migration from pre-wicket application might be easier
Please check the patch to get the whole idea.
Votes and comments are greatly appreciated :-)
--
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.