【问题标题】:I need to add a filter in Vaadin that intercepts all requests我需要在 Vaadin 中添加一个过滤器来拦截所有请求
【发布时间】:2021-10-12 08:57:05
【问题描述】:

我在会话中设置了一个属性,它是真还是假。如果该属性为真,我需要 vaadin 拦截所有请求并将其重定向到新的自定义 Vaadin 页面。我知道有一个名为 VaadinServiceInitListener 的接口,但是我无法将用户重定向到自定义页面,因为 UI.getcurrent() 返回 null。

这是我的代码:

@Override
public void serviceInit(ServiceInitEvent serviceEvent) {
    serviceEvent.getSource().addSessionInitListener(initEvent -> {
        initEvent.getSession().addRequestHandler(globalRequestHandler());
    });

}

public RequestHandler globalRequestHandler() {
    return (session, vaadinRequest, response) -> {
        session.access(() -> {
            if (isSessionlocked()) {
                UI.getCurrent().navigate(MyCustomView.class);
            }
        });
        return false;
    };
 }

【问题讨论】:

    标签: vaadin-flow vaadin14


    【解决方案1】:

    尝试重定向到想要的路径

    response.setStatus(HttpStatus.SC_TEMPORARY_REDIRECT);
    response.setHeader(HttpHeaders.LOCATION, path);
    

    【讨论】:

    • 这是可行的,但似乎 vaadin 有其他请求处理程序在我之前。如果我添加一个弹簧过滤器并记录所有请求,我可以看到虽然有几个请求正在进行,但我的请求处理程序只接收到几个请求。我希望能够捕获所有请求并适当地处理它们(类似于 Vaadinsession.lock() 所做的)。
    • 您可以创建自己的高优先级过滤器,而不是调用 addRequestHandler,请参阅stackoverflow.com/a/69486045/9274948
    • 谢谢,这似乎可行。
    猜你喜欢
    • 1970-01-01
    • 2020-08-12
    • 2013-01-31
    • 1970-01-01
    • 2017-02-09
    • 2021-08-07
    • 1970-01-01
    • 1970-01-01
    • 2017-09-12
    相关资源
    最近更新 更多