为什么不是';t自定义实现的VaadinServiceInitListener正在vaadin 13.0.2中侦听吗?

为什么不是';t自定义实现的VaadinServiceInitListener正在vaadin 13.0.2中侦听吗?,vaadin,vaadin-flow,Vaadin,Vaadin Flow,我想验证用户是否已登录。为了实现这一点,我在vaadin 13.0.2中找到了一个名为vaadin ServiceInitListener的东西。该类用于侦听所有UI的BeforeEnter事件,以便在允许进入任何页面之前检查用户是否已登录 我已经创建了一个带有applayout插件的vaadin13.0.2项目,通过实现登录功能和VaadinServiceInitListener来检查用户是否登录 public class AAACATInitListener implements Vaadi

我想验证用户是否已登录。为了实现这一点,我在vaadin 13.0.2中找到了一个名为vaadin ServiceInitListener的东西。该类用于侦听所有UI的BeforeEnter事件,以便在允许进入任何页面之前检查用户是否已登录

我已经创建了一个带有applayout插件的vaadin13.0.2项目,通过实现登录功能和VaadinServiceInitListener来检查用户是否登录

public class AAACATInitListener implements VaadinServiceInitListener {
    private static final long serialVersionUID = 1L;

    private static InAppSessionContextImpl appContextImpl;

    @Override
    public void serviceInit(ServiceInitEvent event) {
        System.out.println("in service init event");
        event.getSource().addUIInitListener(new UIInitListener() {
            private static final long serialVersionUID = 1L;

            @Override
            public void uiInit(UIInitEvent event) {

                event.getUI().addBeforeEnterListener(new BeforeEnterListener() {
                    private static final long serialVersionUID = 1L;

                    @Override
                    public void beforeEnter(BeforeEnterEvent event) {

                        appContextImpl = (InAppSessionContextImpl)VaadinSession.getCurrent().getAttribute("context");

                        if (appContextImpl == null) {
                            WebBrowser webBrowser = UI.getCurrent().getSession().getBrowser();
                            String address = webBrowser.getAddress();

                            if(RememberAuthService.isAuthenticated(address) != null && !RememberAuthService.isAuthenticated(address).isEmpty()) {
                                //System.out.println("Found Remembered User....");
                                IBLSessionContext iblSessionContext = null;
                                try {
                                    iblSessionContext = new UserBLManager().doRememberedStaffUserLogin(RememberAuthService.isAuthenticated(address), "");
                                    if(iblSessionContext != null) {
                                        InAppSessionContextImpl localAppContextImpl = new InAppSessionContextImpl();
                                        localAppContextImpl.setBLSessionContext(iblSessionContext);
                                        localAppContextImpl.setModuleGroupList(iblSessionContext.getSessionAccessControl().getPermittedModuleGroups());
                                        appContextImpl = localAppContextImpl;

                                        event.rerouteTo(ApplicationMainView.class);

                                    }else {
                                        Notification.show("Your access has been expired, Please contact your administrator", 5000, Position.BOTTOM_CENTER);
                                    }
                                } catch (AuthenticationFailedException e) {
                                    Notification.show("Authentication Failed, Please Reset Cookies And Try Again", 5000, Position.BOTTOM_CENTER);
                                } catch (Exception e){  
                                    e.printStackTrace();
                                    Notification.show("Unexpected Error Occurred, Please Reset Cookies And Try Again", 5000, Position.BOTTOM_CENTER);
                                }
                            }else {
                                System.out.println("Session context is null, creating new context");
                                appContextImpl = new InAppSessionContextImpl();
                                VaadinSession.getCurrent().setAttribute("context", appContextImpl);
                                event.rerouteTo(LoginView.class);
                            }
                        } else {
                            System.out.println("Session context is not null");
                            InAppSessionContextImpl localAppContextImpl = new InAppSessionContextImpl();
                            localAppContextImpl.setBLSessionContext(appContextImpl.getBLSessionContext());
                            localAppContextImpl.setModuleGroupList(appContextImpl.getModuleGroupList());
                            appContextImpl = localAppContextImpl;
                            event.rerouteTo(ApplicationMainView.class);
                        }

                    }
                });
            }
        });
    }

    public static void setBLSessionContext(IBLSessionContext iblSessionContext) {
        appContextImpl.setBLSessionContext(iblSessionContext);
    }

    public static void setModuleGroupList(List<ModuleGroupVO> moduleGroupList) {
        appContextImpl.setModuleGroupList(moduleGroupList);
    }

    private class InAppSessionContextImpl implements InAppSessionContext {
        private static final long serialVersionUID = 1L;

        private List<ModuleGroupVO> moduleGroupList;
        private IBLSessionContext iblSessionContext;
        private Map<String, Object> attributeMap;

        public InAppSessionContextImpl() {
            this.attributeMap = new HashMap<String, Object>();
        }

        @Override
        public List<ModuleGroupVO> getModuleGroupList() {
            return moduleGroupList;
        }

        public void setModuleGroupList(List<ModuleGroupVO> moduleGroupList) {
            this.moduleGroupList = moduleGroupList;
        }

        @Override
        public IBLSessionContext getBLSessionContext() {
            return iblSessionContext;
        }

        public void setBLSessionContext(IBLSessionContext iblSessionContext) {
            this.iblSessionContext = iblSessionContext;
        }

        @Override
        public IBLSession getBLSession() {
            if(iblSessionContext != null)
                return iblSessionContext.getBLSession();
            return null;
        }

        @Override
        public boolean isPermittedAction(String actionAlias) {
            if (getBLSessionContext() != null) {
                if (getBLSessionContext().getSessionAccessControl() != null) {
                    return getBLSessionContext().getSessionAccessControl().isPermittedAction(actionAlias);
                }
            }
            return false;
        }

        @Override
        public void setAttribute(String key, Object attribute) {
            attributeMap.put(key, attribute);
        }

        @Override
        public Object getAttribute(String key) {
            return attributeMap.get(key);
        }
    }
}
公共类AAACATInitListener实现了VaadinServiceInitListener{
私有静态最终长serialVersionUID=1L;
私有静态InAppSessionContextImpl-appContextImpl;
@凌驾
public void serviceInit(ServiceInitEvent事件){
System.out.println(“服务内初始化事件”);
event.getSource().addUIInitListener(新UIInitListener()){
私有静态最终长serialVersionUID=1L;
@凌驾
public void uiInit(UIInitEvent事件){
event.getUI().addBeforeEnterListener(新的BeforeEnterListener()){
私有静态最终长serialVersionUID=1L;
@凌驾
进入前公共无效(进入前事件){
appContextImpl=(InAppSessionContextImpl)VaadinSession.getCurrent().getAttribute(“上下文”);
if(appContextImpl==null){
WebBrowser WebBrowser=UI.getCurrent().getSession().getBrowser();
字符串地址=webBrowser.getAddress();
if(RememberAuthService.isAuthenticated(address)!=null&&!RememberAuthService.isAuthenticated(address.isEmpty()){
//System.out.println(“找到记住的用户…”);
IBLSessionContext IBLSessionContext=null;
试一试{
iblSessionContext=new UserBLManager().doRememberedStaffUserLogin(RememberAuthService.isAuthenticated(地址),“”);
如果(iblSessionContext!=null){
InAppSessionContextImpl localAppContextImpl=新建InAppSessionContextImpl();
localAppContextImpl.setBLSessionContext(iblSessionContext);
localAppContextImpl.setModuleGroupList(iblSessionContext.getSessionAccessControl().getPermittedModuleGroups());
appContextImpl=localAppContextImpl;
重新路由到(ApplicationMainView.class);
}否则{
通知。显示(“您的访问权限已过期,请与管理员联系”,5000,位置。底部\u中心);
}
}捕获(身份验证失败异常e){
通知。显示(“身份验证失败,请重置Cookies并重试”,5000,位置。底部\u中心);
}捕获(例外e){
e、 printStackTrace();
通知.show(“发生意外错误,请重置Cookies并重试)”,5000,位置。底部\u中心);
}
}否则{
System.out.println(“会话上下文为空,正在创建新上下文”);
appContextImpl=新的InAppSessionContextImpl();
VaadinSession.getCurrent().setAttribute(“上下文”,appContextImpl);
重新路由到(LoginView.class);
}
}否则{
System.out.println(“会话上下文不为空”);
InAppSessionContextImpl localAppContextImpl=新建InAppSessionContextImpl();
localAppContextImpl.setBLSessionContext(appContextImpl.getBLSessionContext());
localAppContextImpl.setModuleGroupList(appContextImpl.getModuleGroupList());
appContextImpl=localAppContextImpl;
重新路由到(ApplicationMainView.class);
}
}
});
}
});
}
公共静态无效setBLSessionContext(IBLSessionContext IBLSessionContext){
appContextImpl.setBLSessionContext(iblSessionContext);
}
公共静态无效setModuleGroupList(列表moduleGroupList){
appContextImpl.setModuleGroupList(模块组列表);
}
AppSessionContextImpl中的私有类在AppSessionContext中实现{
私有静态最终长serialVersionUID=1L;
私有列表模块组列表;
私有IBLSessionContext IBLSessionContext;
私有地图属性映射;
公共InAppSessionContextImpl(){
this.attributeMap=newhashmap();
}
@凌驾
公共列表getModuleGroupList(){
返回模块组列表;
}
public void setModuleGroupList(列表moduleGroupList){
this.moduleGroupList=moduleGroupList;
}
@凌驾
公共IBLSessionContext getBLSessionContext(){
返回iblSessionContext;
}
public void setBLSessionContext(IBLSessionContext IBLSessionContext){
this.iblSessionContext=iblSessionContext;
}
@凌驾
公共会话getBLSession(){
如果(iblSessionContext!=null)
返回iblSessionContext.getBLSession();
返回null;
}
@凌驾
公共布尔值许可证
public class MainView extends VerticalLayout implements RouterLayout, BeforeEnterObserver {
   ...
    @Override
    public void beforeEnter(BeforeEnterEvent event) {
         ...
    }
}