为什么自定义实现的 VaadinServiceInitListener 不在 vaadin 13.0.2 中监听?

2024-04-21

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

我通过赞赏实现的登录功能和 VaadinServiceInitListener 创建了一个带有 app-layout-addon 的 vaadin 13.0.2 项目来检查用户是否登录。

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 未监听。


如果您使用 Spring,只需添加一个@Component对类进行注释,它应该可以工作。如果您不使用 Spring,请遵循 @codinghaus 的回答。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

为什么自定义实现的 VaadinServiceInitListener 不在 vaadin 13.0.2 中监听? 的相关文章

  • Vaadin 会话管理 - 它是如何工作的?

    在工作中 我们使用 Vaadin 开发一个 Web 应用程序 我是一位相当高级的 Java 程序员 我对 Vaadin 也有经验 但现在我已经到了需要将信息存储在用户会话中的地步 区域设置 用户名等属性 In the Vaadin 文档 h
  • 如何使用 CSS 来设计表单组件的样式?

    Vaadin 如何使用纯粹为 HTML 元素编写的 CSS 例如 body h1 等元素的样式和布局 并在 Vaadin 中使用确切的 CSS 样式 是否需要对 CSS 进行更改以映射到相应的 Vaadin 元素 或者可以按原样使用该 CS
  • 使用 vaadin 7.3 和 valo 主题编译我的主题时出错

    我正在开发一个使用 vaadin v7 2 的 vaadin 应用程序 现在它已更新到 v7 3 7 并使用新的 valo 主题和我的自定义样式 使用编译整个项目时mvn clean install主题得到完美编译 但是当我尝试使用命令提示
  • GWT 和 Vaadin 之间的差异

    谁能建议 GWT 或 Vaadin 是否是设计应用程序的更好选择 另外 编码风格有什么区别 在 GWT 中 应用程序逻辑通常在客户端运行 它仅在需要读取 保存某些数据时调用服务器 在 Vaadin 中 应用程序逻辑位于服务器端 每次用户交互
  • 在 Vaadin 中获取组件的准确宽度和高度

    在vaadin中 如果我将宽度和高度设置为未定义 那么在使用getHeight getWidth 函数时我将得到 1 如果我使用 sizeful 我会得到 100 但是如何获得组件的准确宽度和高度呢 您可以通过调用 javascript 函
  • 如何从包含为 jar 的不同项目模块 @Inject 对象

    我在多模块 Maven 项目中使用 Vaadin CDI 其中包含一个通用类 如接口 抽象类等 所需的模块 我的问题是 我无法 Inject带注释的类 UIScoped像往常一样 它被放置在core模块到另一个 我还在得到不满意解决异常 S
  • 在 docker 中使用 vaadin 运行 Spring boot 应用程序时初始化 Tomcat 失败

    我是一名业余爱好者 最近从 heroku 切换到 render com 我想把我的 SringBoot 应用程序放在那里 但它要求我在我没有经验的 docker 环境中运行它 我设法为其编写 Dockerfile 并从 jar 文件运行它
  • Vaadin:如何显示 MySQL 数据库中的数据?

    我正在开发 Vaadin Flow 版本 14 1 应用程序 但遇到了这个问题 我无法将其直接与 MySQL 数据库连接 我已经与 Maven 设置了 JDBC 连接 还创建了一个名为 Datasource 的单例类 在其中存储我的值和方法
  • Vaadin 14 中列标题中的文本可以换行到网格中的多行吗?

    在上图中 我有一个Grid https vaadin com components vaadin grid在 Vaadin 14 中创建 请注意列标题 未换行的红线 我试图弄清楚是否有可能 并且安全 简单 标准 让列标签换行 例如 就像在
  • Vaadin 7 应用程序中推送的最小示例(“@Push”)

    我想看看使用新功能的最小示例推送技术 https vaadin com book vaadin7 page advanced push html在 Vaadin 7 中 例如新的 Push注解 我在获取时遇到问题服务器推送 http en
  • 如何刷新表中的单行?

    是否可以刷新a的单行vaadin table成分 到目前为止 如果表行编辑完成 我只需刷新整个表 table refreshRowCache 但这可能会导致稍后的大型表出现性能问题 那么 如何刷新单行呢 我在 Vaadin 论坛上发现了这个
  • Vaadin 将 JavaScript 流转至 Java 调用

    按照本教程进行操作https vaadin com blog calling java from javascript https vaadin com blog calling java from javascript我试图从 javas
  • 使用 DatabaseMetaData 检索 mysql 表注释

    因此 我正在将 Vaadin Java Web 框架用于需要编辑表的功能的项目 Vaadin 提供了一种获取方法Connection对象来自SimpleJDBCConnectionPool 这是 API https vaadin com a
  • 在 vaadin 8 中将文本复制到剪贴板

    我想问如何在 vaadin 8 java web 应用程序中正确地将一些文本复制到剪贴板 我找到了适用于 Chrome 和 IE 的解决方案 但不适用于 Firefox Firefox 总是提示 错误 document execComman
  • Vaadin 14 组合框选择鼠标悬停时的工具提示

    我正在使用 Vaadin 14 Java 我有一个带有枚举的组合框作为可能的选择项 我想在组合框中显示枚举作为可能的选择 但我想在鼠标悬停 工具提示上显示较长的属性 名称 我看到旧版本的 Vaadin 也存在同样的问题 显然没有解决方案 并
  • 为什么自定义实现的 VaadinServiceInitListener 不在 vaadin 13.0.2 中监听?

    我想验证用户是否已登录以实现它 我在 vaadin 13 0 2 中找到了名为 VaadinServiceInitListener 的东西 此类用于侦听所有 UI 的 BeforeEnter 事件 以便在允许之前检查用户是否已登录进入任意页
  • 通过代码更改 Vaadin 7 中的主题

    我正在 Vaadin 7 中做一个项目 我需要更改页面的主题 在 Vaadin 6 中 有一个名为 setTheme 的函数 这样我就可以在代码中的任何位置使用该函数更改主题 但是 在 Vaadin 7 中 我找不到类似的东西 我知道会有办
  • BND 将相同的包放入manifest.mf 的导出和导入部分

    我有一个 Vaadin 应用程序 我正在尝试使用 Maven BND 将其构建为一组 OSGI 包 我无法将捆绑包部署到 Apache Felix 因为某些依赖项无法解决 Apache Felix 抱怨找不到捆绑包 A 所需的包 XYZ 尽
  • 使用 Vaadin 声明式 UI 时如何设置自定义字体图标?

    我正在使用自定义字体图标集 如 wiki 文章中所述Vaadin 7 2 中的字体图标 https vaadin com wiki wiki Main Using font icons 一切正常 但是 如果我使用声明式 UI 我将无法使其正
  • 负载测试vaadin 7.0.4返回错误No UIProvider

    我想对 5000 个用户的 vaadin 应用程序进行负载测试 我找到了这个https vaadin com wiki wiki Main JMeter 20Testing https vaadin com wiki wiki Main J

随机推荐