如何在浏览器关闭时关闭 vaadin 会话但保留 http 会话?

2024-01-27

我正在开发一个 vaadin 7 应用程序,使用 jaas 进行用户身份验证和授权,并在应用程序服务器(glassfish)中定义领域。

我有这样的要求:

  • 用户可以保持登录状态一段时间,这样他就不需要每次都输入密码。
    我通过设置 http 会话的会话超时来做到这一点。

  • vaadin 会话可以锁定某些资源,并且在锁定时,其他会话无法使用该资源。当 vaadin 会话关闭时,所有锁定的资源都会被释放。
    我将心跳间隔设置为仅 15 秒。

我无法同时满足这两个要求。 如果我将http会话超时设置为一分钟,则关闭浏览器后一分钟就会释放资源,但下次用户不会进行身份验证。
如果我将 https 会话超时设置为几天,用户将在此时通过身份验证,但 vaadin 会话在 3 次错过心跳后不会立即关闭。仅当用户下次使用相同的 http 会话使用该应用程序时,它才会关闭。

如何才能同时满足这两个要求呢?

这里是我正在使用的技术的更多信息:

  • 玻璃鱼4
  • 网络应用程序 3.1
  • 瓦丁7.1.7
  • vaadin-cdi 1.0-快照

谢谢你的帮助


您可能想看看春季安全 http://docs.spring.io/autorepo/docs/spring-security/3.2.x/reference/htmlsingle/尤其是记住我身份验证 http://docs.spring.io/autorepo/docs/spring-security/3.2.x/reference/htmlsingle/#remember-me- 我个人会使用的替代方案,而不是尝试自己实现安全的持久登录。

如果你想走DIY之路:

我认为尝试将 Vaadin 与 Http Session 分开并不是一个好主意。这Vaadin 书中的应用程序生命周期部分 https://vaadin.com/book/vaadin7/-/page/application.lifecycle.html says:

当新客户端连接时,它会创建一个新的用户会话,由 VaadinSession 的实例表示。使用浏览器中存储的 cookie 来跟踪会话。 … [Vaadin Session] 还通过 WrappedSession 提供对较低级别会话对象 HttpSession 和 PortletSession 的访问。

也许您可以更改第一个要求的解决方案(“用户可以保持登录状态一段时间,这样他就不需要每次都输入密码。”)通过将登录凭据与 http 会话分离?

您可以将一些带有时间戳和唯一ID的内容存储为cookie(带有过期日期)并且定制VaadinServlet https://vaadin.com/book/vaadin7/-/page/application.lifecycle.html#application.lifecycle.servlet-service与你自己的SessionInitListener and SessionDestroyListener检查(并设置)它,并且需要登录凭据或接受来自客户端的凭据,具体取决于您在服务器上执行的检查。

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

如何在浏览器关闭时关闭 vaadin 会话但保留 http 会话? 的相关文章

  • 如何将 javax.persistence.Column 定义为 Unsigned TINYINT?

    我正在基于 MySQL 数据库中的现有表创建 Java 持久性实体 Bean 使用 NetBeans IDE 8 0 1 我在这个表中遇到了一个字段 其类型为 无符号 TINYINT 3 我发现可以执行以下操作将列的类型定义为 unsign
  • 如何在 Firebase 远程配置中从 JSON 获取值

    我是 Android 应用开发和 Firebase 的新手 我想知道如何获取存储在 Firebase 远程配置中的 JSONArray 文件中的值 String 和 Int 我使用 Firebase Remote Config 的最终目标是
  • 使用 Ant 将非代码资源添加到 jar 文件

    我正在将 java 应用程序打包成 jar 文件 我正在使用 ant 和 eclipse 我实际上需要在 jar 中直接在根文件夹下包含几个单独的非代码文件 xml 和 txt 文件 而不是与代码位于同一位置 我正在尝试使用includes
  • 不同类型的数组

    是否可以有一个包含两种不同类型数据的数组 我想要一个包含双精度型和字符串的数组 我尝试过 ArrayList
  • Spring Data JPA 选择不同

    我有一个情况 我需要建立一个select distinct a address from Person a 其中地址是 Person 内的地址实体 类型的查询 我正在使用规范动态构建我的 where 子句并使用findAll Specifi
  • 自动生成Flyway的迁移SQL

    当通过 Java 代码添加新模型 字段等时 JPA Hibernate 的自动模式生成是否可以生成新的 Flyway 迁移 捕获自动生成的 SQL 并将其直接保存到新的 Flyway 迁移中 以供审查 编辑 提交到项目存储库 这将很有用 预
  • 如何检测 Java 字符串中的 unicode 字符?

    假设我有一个包含 的字符串 我如何找到所有这些 un icode 字符 我应该测试他们的代码吗 我该怎么做呢 例如 给定字符串 A X 我想将其转换为 AYXY 我想对其他 unicode 字符做同样的事情 并且我不想将它们存储在某种翻译映
  • 从 GitHub 上托管的 Spring Cloud Config Server 访问存储库的身份验证问题

    我在 GitHub 上的存储库中托管配置 如果我将回购公开 一切都好 但如果我将其设为私有 我将面临 org eclipse jgit errors TransportException https github com my user m
  • 在另一个模块中使用自定义 gradle 插件模块

    我正在开发一个自定义插件 我希望能够在稍后阶段将其部署到存储库 因此我为其创建了一个独立的模块 在对其进行任何正式的 TDD 之前 我想手动进行某些探索性测试 因此 我创建了一个使用给定插件的演示模块 到目前为止 我发现执行此操作的唯一方法
  • 如何在 Spring 属性中进行算术运算?

  • GWT 2.3 开发模式 - 托管模式 JSP 编译似乎不使用 java 1.5 兼容性

    无法编译 JSP 类 生成的 servlet 错误 DefaultMessage 上次更新 0 日期 中 0 时间 HH mm ss z 语法 错误 注释仅在源级别为 1 5 时可用 在尝试以开发模式在 Web 浏览器中打开我的 gwt 模
  • HashMap 值需要不可变吗?

    我知道 HashMap 中的键需要是不可变的 或者至少确保它们的哈希码 hashCode 不会改变或与另一个具有不同状态的对象发生冲突 但是 HashMap中存储的值是否需要与上面相同 为什么或者为什么不 这个想法是能够改变值 例如在其上调
  • “无法实例化活动”错误

    我的一个 Android 应用程序拥有大约 100 000 个用户 每周大约 10 次 我会通过 Google 的市场工具向我报告以下异常情况 java lang RuntimeException Unable to instantiate
  • Spring-ws:如何从没有“Request”元素的 xsd 创建 Wsdl

    尝试为客户端实现 SOAP Web 服务 我需要一个 wsdl 文件来通过soapUI 测试该服务 但正如您在下面看到的 这个 xsd 没有 Request 和 Response 方法 所有请求和响应都被定义为基本 ServiceProvi
  • OpenCSV:将嵌套 Bean 映射到 CSV 文件

    我正在尝试将 bean 映射到 CSV 文件 但问题是我的 bean 具有其他嵌套 bean 作为属性 所发生的情况是 OpenCSV 遍历属性找到一个 bean 然后进入其中并映射该 bean 内的所有数据 如果找到另一个 bean 它就
  • 如何重新启动死线程? [复制]

    这个问题在这里已经有答案了 有哪些不同的可能性可以带来死线程回到可运行状态 如果您查看线程生命周期图像 就会发现一旦线程终止 您就无法返回到新位置 So 没有办法将死线程恢复到可运行状态 相反 您应该创建一个新的 Thread 实例
  • org.apache.commons.net.io.CopyStreamException:复制时捕获 IOException

    我正在尝试使用以下方法中的代码将在我的服务器中创建的一些文件复制到 FTP 但奇怪的是我随机地低于错误 我无法弄清楚发生了什么 Exception org apache commons net io CopyStreamException
  • 在浏览器刷新中刷新检票面板

    我正在开发一个付费角色系统 一旦用户刷新浏览器 我就需要刷新该页面中可用的统计信息 统计信息应该从数据库中获取并显示 但现在它不能正常工作 因为在页面刷新中 java代码不会被调用 而是使用以前的数据加载缓存的页面 我尝试添加以下代码来修复
  • 洪水填充优化:尝试使用队列

    我正在尝试创建一种填充方法 该方法采用用户指定的初始坐标 检查字符 然后根据需要更改它 这样做之后 它会检查相邻的方块并重复该过程 经过一番研究 我遇到了洪水填充算法并尝试了该算法 它可以工作 但无法满足我对 250 x 250 个字符的数
  • Java EE 目录结构

    我对以下教程有疑问 http www mkyong com jsf2 jsf 2 internationalization example http www mkyong com jsf2 jsf 2 internationalizatio

随机推荐