我需要在 Vaadin 中添加一个拦截所有请求的过滤器

I need to add a filter in Vaadin that intercepts all requests

我在会话中设置了一个属性,该属性为 true 或 false。如果该属性为真,我需要 vaadin 拦截所有请求并将其重定向到新的自定义 Vaadin 页面。我知道有一个名为 VaadinServiceInitListener 的接口,但是我无法将用户重定向到自定义页面,因为 UI.getcurrent() returns 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;
    };
 }

尝试重定向到所需路径

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