Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/349.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 带过滤链的瓦丁请求过滤器?_Java_Servlets_Vaadin - Fatal编程技术网

Java 带过滤链的瓦丁请求过滤器?

Java 带过滤链的瓦丁请求过滤器?,java,servlets,vaadin,Java,Servlets,Vaadin,在Vaadin中是否有一种方法可以钩住请求链,并在提供的VaadinSession中围绕实际请求/响应周期执行操作?目前我使用的是javax.servlet.Filter,但似乎VaadinSession.getCurrent()被设置在更深的地方,并且在过滤器本身中,它在chain.doFilter()之前和之后都被取消设置。我找到了一个解决方法。 首先,我不能插入请求处理程序链,因为没有这样的结构。为了模拟它,我将我的代码分为请求前代码和请求后代码(在我的情况下,这是可以的)。我在一个普通的

在Vaadin中是否有一种方法可以钩住请求链,并在提供的
VaadinSession
中围绕实际请求/响应周期执行操作?目前我使用的是
javax.servlet.Filter
,但似乎
VaadinSession.getCurrent()
被设置在更深的地方,并且在过滤器本身中,它在
chain.doFilter
()之前和之后都被取消设置。

我找到了一个解决方法。 首先,我不能插入请求处理程序链,因为没有这样的结构。为了模拟它,我将我的代码分为请求前代码和请求后代码(在我的情况下,这是可以的)。我在一个普通的
VaadinRequestHandler
中执行预请求,并返回false(正常请求继续)。请求后的内容会转到映射在
web.xml
中的
javax.serlvet.Filter

其次,如果其他任何人也有同样的问题,并且代码也可以使用相同的模式进行拆分,下面是预请求(vaadin端)列表:

公共类MyVaadinServlet扩展了VaadinServlet{
@凌驾
受保护的VaadinServletService createServletService(DeploymentConfiguration DeploymentConfiguration)引发ServiceException{
VaadinServletService=新的VaadinServletService(此,
部署(配置){
@凌驾
受保护列表createRequestHandlers()引发ServiceException{
List handlers=super.createRequestHandlers();
添加((会话、请求、响应)->{
//代码在这里
返回false;
});
返回处理程序;
}
};
service.init();
回程服务;
}
}

好的,我知道如果我想在处理ui侦听器之前潜入请求链,我必须扩展
VaadinService
并覆盖它的
createRequestHandlers
。然后可以在重写的
VaadinServlet.createServletService()
方法中创建扩展类。不确定是否应该关闭该问题
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;
    }
}