2015-06-19 117 views
1

Vaardin有沒有辦法掛鉤到請求鏈,並在VaadinSession提供的真正請求/響應週期內執行操作?目前我使用javax.servlet.Filter,但似乎VaadinSession.getCurrent()設置在更深的地方,並且在濾波器本身中,它在chain.doFilter()之前和之後均未設置。帶過濾器鏈的Vaadin請求過濾器?

+0

好的,我理解如果我想在處理ui偵聽器之前偷偷進入請求鏈,那麼我必須擴展VaadinService並覆蓋它的createRequestHandlers。擴展類可以在覆蓋'VaadinServlet.createServletService()'方法中創建。 –

+0

不知道我是否應該關閉這個問題 –

回答

1

我找到了解決方法。 首先,我不能插入請求處理程序鏈,因爲沒有這樣的結構。爲了模擬它,我已經將我的代碼分成了預先請求和請求後代碼(對我而言,這有點不錯)。我在普通的VaadinRequestHandler中做我的預先要求的東西,並返回false(對於正常的請求繼續)。請求後的內容變爲javax.serlvet.Filter,映射到web.xml

其次,如果任何人是具有同樣的問題,並且該代碼也可裂使用相同的圖案,這裏是一個預請求(vaadin側)列表:

public class MyVaadinServlet extends VaadinServlet{ 
    @Override 
    protected VaadinServletService createServletService(DeploymentConfiguration deploymentConfiguration) throws ServiceException { 
     VaadinServletService service = new VaadinServletService(this, 
       deploymentConfiguration){ 
      @Override 
      protected List<RequestHandler> createRequestHandlers() throws ServiceException { 
       List<RequestHandler> handlers = super.createRequestHandlers(); 
       handlers.add((session, request, response) -> { 
        // HERE GOES THE CODE 
        return false; 
       }); 
       return handlers; 
      } 
     }; 
     service.init(); 
     return service; 
    } 
}