Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Why isn't an custom implemented VaadinServiceInitListener is listening in vaadin 13.0.2?

I would like to validate user is signed in or not to achieve it i found something called VaadinServiceInitListener in vaadin 13.0.2 This class is used to listen to BeforeEnter event of all UIs in order to check whether a user is signed in or not before allowing entering any page.

I have created an vaadin 13.0.2 project with app-layout-addon by appreciated implemented login functionality and VaadinServiceInitListener to check whether a user is signed in or not.

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);
        }
    }
}

Expected results redirect to login page if user not signed in or else to main application page but AAACATInitListener is not listening.

like image 524
Rahul Jha Avatar asked Dec 13 '25 01:12

Rahul Jha


1 Answers

If you are using Spring, simply add a @Component annotation to the class and it should work. If youre not using Spring, follow @codinghaus' answer.

like image 86
kscherrer Avatar answered Dec 15 '25 14:12

kscherrer