Web filter installer¶
WebInstallersBundle / WebFilterInstaller
Register new filter in main or admin contexts.
Recognition¶
Detects classes annotated with @javax.servlet.annotation.WebFilter
annotation and register them in dropwizard environment.
@WebFilter("/some/*") public class MyFilter implements Filter { ... }
Only the following annotation properties are supported: filterName
, urlPatterns
(or value
), servletNames
, dispatcherTypes
, initParams
, asyncSupported
.
Warning
Url patterns and servlet names can't be used at the same time.
Filter name is not required. If name not provided, then it will be generated as: . (dot) at the beginning to indicate generated name, followed by lower-cased class name. If class ends with "filter" then it will be cut off. For example, for class "MyCoolFilter" generated name will be ".mycool".
Tip
Use guicey @Order
annotation to order servlets registration.
@Order(10) @WebFilter("/some/*") public class MyFilter implements Filter { ... }
There is a difference between using filter installer and registering filters with guice servlet module: guice servlet module handles registered servlets and filters internally in GuiceFilter (which is installed by guicey in both app and admin contexts). As a side effect, there are some compatibility issues between guice servlets and native filters (rare and usually not blocking, but still).
Installer use guice only for filter instance creation and register this instance directly in dropwizard environment (using annotation metadata).
Async¶
Example of async filter definition:
@WebFilter(urlPatterns = "/asyncfilter", asyncSupported = true) public class AsyncFilter implements Filter { @Override public void init(FilterConfig filterConfig) throws ServletException { } @Override public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException { final AsyncContext context = request.startAsync(); context.start(() -> { context.getResponse().writer.write("done!"); context.complete(); }); } @Override public void destroy() { } }
Note that guice servlet module does not allow using async filters, so installer is the only option to install async filters.
Admin context¶
By default, installer target application context. If you want to install into admin context then
use guicey @AdminContext
annotation.
For example:
@AdminContext @WebFilter("/some/*") public class MyFilter implements Filter { ... }
Will install filter in admin context only.
If you want to install in both contexts use andMain attribute:
@AdminContext(andMain = true) @WebFilter("/some/*") public class MyFilter implements Filter { ... }