问题描述
所以我有一个RequestHandler(使用VaadinServiceInitListener):
public class ApplicationServiceInitListener implements VaadinServiceInitListener {
@Override
public void serviceInit(ServiceInitEvent event) {
event.addRequestHandler((session,request,response) -> {
...
});
}
然后在RequestHandler中,我想检查是否已登录用户。到目前为止一切顺利。
如果用户已登录,则将按常规处理该请求。如果没有,我想将他重定向到登录页面。请求处理程序有可能吗?
我像这样使用UI类的navigation-Method:
UI.getCurrent().navigate("..");
但是问题在于,在请求时,没有实例化UI,所以我将获得NPE。
解决方法
不是您的确切问题的答案(是否可以解决),但通常会出现在routing lifecycle docs中的BeforeEnterListener
(您可以在其中进行重新路由)中。有关示例,请参见spring security tutorial中的代码:
void beforeEnter(BeforeEnterEvent event) {
if (!LoginView.class.equals(event.getNavigationTarget()) && !SecurityUtils.isUserLoggedIn()) {
event.rerouteTo(LoginView.class);
}
}