向 guice servlet 添加过滤器
Adding filter to guice servlet
我使用 guice servet 创建了一个 servlet,它工作正常:
protected Injector getInjector() {
return Guice.createInjector(new ServletModule() {
protected void configureServlets() {
bind(MyService.class).to(MyServiceImpl.class);
serve("/myservlet").with(MyServlet.class);
}
});
}
我的 servlet 如下所示:
@Inject
private MyService myService;
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
response.getWriter().print(myService.hello("John Doe").toString());
}
现在我正在尝试向其添加过滤器,例如:
bind(MyService.class).to(MyServiceImpl.class);
filter("/*").through(MyFilter.class);
serve("/myservlet").with(MyServlet.class);
我的过滤器看起来像这样:
@Singleton public class MyFilter implements Filter {
public void init(FilterConfig filterConfig) throws ServletException { }
public void doFilter(ServletRequest request,
ServletResponse response,
FilterChain chain) throws IOException, ServletException {
System.out.println("Yeah");
}
public void destroy() { }
}
添加过滤器后,servlet 不再被调用。
当我删除过滤器时,servlet 再次工作。
我做错了什么?
问题不在于您的 Guice 程序集,而在于您的过滤器实现。您必须致电:
chain.doFilter(request, response);
在您的 doFilter
方法中通过过滤器传递处理。您可以在 javadoc.
中阅读有关典型过滤器的更多信息
我使用 guice servet 创建了一个 servlet,它工作正常:
protected Injector getInjector() {
return Guice.createInjector(new ServletModule() {
protected void configureServlets() {
bind(MyService.class).to(MyServiceImpl.class);
serve("/myservlet").with(MyServlet.class);
}
});
}
我的 servlet 如下所示:
@Inject
private MyService myService;
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
response.getWriter().print(myService.hello("John Doe").toString());
}
现在我正在尝试向其添加过滤器,例如:
bind(MyService.class).to(MyServiceImpl.class);
filter("/*").through(MyFilter.class);
serve("/myservlet").with(MyServlet.class);
我的过滤器看起来像这样:
@Singleton public class MyFilter implements Filter {
public void init(FilterConfig filterConfig) throws ServletException { }
public void doFilter(ServletRequest request,
ServletResponse response,
FilterChain chain) throws IOException, ServletException {
System.out.println("Yeah");
}
public void destroy() { }
}
添加过滤器后,servlet 不再被调用。
当我删除过滤器时,servlet 再次工作。
我做错了什么?
问题不在于您的 Guice 程序集,而在于您的过滤器实现。您必须致电:
chain.doFilter(request, response);
在您的 doFilter
方法中通过过滤器传递处理。您可以在 javadoc.