Добавление фильтра в сервлет guice


Я создал сервлет, используя Сервет guice, который отлично работает:

protected Injector getInjector() {
    return Guice.createInjector(new ServletModule() {
        protected void configureServlets() {
            bind(MyService.class).to(MyServiceImpl.class);
            serve("/myservlet").with(MyServlet.class);
        }
    });
}

Мой сервлет выглядит так:

@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() { }
}

Как только я добавляю фильтр, сервлет больше не вызывается.

Когда я удаляю фильтр, сервлет снова работает.

Что я делаю не так?

1 2

1 ответ:

Проблема не в вашей сборке Guice, а в вашей реализации фильтра. Вам придется позвонить:

chain.doFilter(request, response);

В вашем методе doFilter передать обработку через фильтр. Вы можете прочитать больше о типичном фильтре в javadoc .