HttpSession 超时后重定向

2023-11-25

我一直在查看有关此主题的许多帖子,但无法找到适合我的情况的解决方案。

我正在使用 Java EE 6 和 JSF 2.0(部署在 JBoss AS 7.1 上)

In my web.xml I have:

    <session-config>
        <session-timeout>1</session-timeout>
    </session-config>

and I 希望当会话自动超时时将用户重定向到登录页面。

我尝试过的:

方法一:使用过滤器

我尝试过以下过滤器:

@WebFilter()
public class TimeOutFilter implements Filter {

        @Override
        public void init(FilterConfig filterConfig) throws ServletException { 
        }

        @Override
        public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException,
        ServletException {
        System.out.println("filter called");
        final HttpServletRequest req = (HttpServletRequest) request;
        final HttpSession session = req.getSession(false);
        if (session != null && !session.isNew()) {
            chain.doFilter(request, response);
        } else {
            System.out.println("Has timed out");
            req.getRequestDispatcher("/logon.xthml").forward(request, response);
        }
    }

    @Override
    public void destroy() {
    }
}

In the web.xml我努力了

<filter-mapping>
    <filter-name>TimeOutFilter</filter-name>
    <url-pattern>*.xhtml</url-pattern>
</filter-mapping>

and

<filter-mapping>
    <filter-name>TimeOutFilter</filter-name>
    <servlet-name>Faces Servlet</servlet-name>
</filter-mapping>

过滤器的工作方式是在每个请求上调用它(在控制台中记录“fiter called”)。但是,当会话超时时,不会调用它。

方法2:HttpSessionLister

我尝试过使用HttpSessionListerner。调用的方法具有以下签名:

public void sessionDestroyed(HttpSessionEvent se) {
}

我无法重定向到特定页面。当我想重定向用户时,我通常使用NavigationHandler来自FacesContext但在这种情况下没有FacesContext (FacesContext.getCurrentInstance()回报null).

根据这个post,HttpListener 无法重定向用户,因为它不是请求的一部分。

Question

解决这个问题的最佳方法是什么?我该怎么做才能使上述两种方法之一发挥作用?


只要客户端未发送 HTTP 请求,您就无法发送 HTTP 响应。就那么简单。这就是 HTTP 的工作原理。如果任何网站能够在客户端未请求的情况下主动推送 HTTP 响应,那么互联网的面貌将会大不相同。

基于客户端键盘/鼠标活动的基于 JavaScript 的心跳,如所回答here,或元refresh标题如所回答here如果您基本上有一个单页 Web 应用程序(因此,您实际上没有使用会话范围而是视图范围),那么这将是解决方案,但如果您在多个选项卡中打开页面,则这不会很好地工作同一会话中的窗口。

理论上,Websockets 是将某些内容推送到客户端的正确解决方案,但这又需要一个活动会话。先有鸡还是先有蛋的问题。此外,它无法在目前仍相对广泛使用的旧浏览器中工作,因此它目前应该仅用于渐进增强。

最好的选择是只定义一个错误页面,用于处理最终用户在会话过期时调用操作的情况。也可以看看javax.faces.application.ViewExpiredException:视图无法恢复.

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

HttpSession 超时后重定向 的相关文章

  • 如何使用 Java 和 Selenium WebDriver 在 C 目录中创建文件夹并需要将屏幕截图保存在该目录中?

    目前正在与硒网络驱动程序和代码Java 我有一种情况 我需要在 C 目录中创建一个文件夹 并在该文件夹中创建我通过 selenium Web 驱动程序代码拍摄的屏幕截图 它需要存储在带有时间戳的文件夹中 如果我每天按计划运行脚本 所有屏幕截
  • Java EE:如何获取我的应用程序的 URL?

    在 Java EE 中 如何动态检索应用程序的完整 URL 例如 如果 URL 是 localhost 8080 myapplication 我想要一个可以简单地将其作为字符串或其他形式返回给我的方法 我正在运行 GlassFish 作为应
  • 多个 Maven 配置文件激活多个 Spring 配置文件

    我想在 Maven 中构建一个环境 在其中我想根据哪些 Maven 配置文件处于活动状态来累积激活多个 spring 配置文件 目前我的 pom xml 的相关部分如下所示
  • 列出jshell中所有活动的方法

    是否有任何命令可以打印当前 jshell 会话中所有新创建的方法 类似的东西 list但仅适用于方法 您正在寻找命令 methods all 它会打印所有方法 包括启动 JShell 时添加的方法 以及失败 被覆盖或删除的方法 对于您声明的
  • JavaMail 只获取新邮件

    我想知道是否有一种方法可以在javamail中只获取新消息 例如 在初始加载时 获取收件箱中的所有消息并存储它们 然后 每当应用程序再次加载时 仅获取新消息 而不是再次重新加载它们 javamail 可以做到这一点吗 它是如何工作的 一些背
  • Liferay ClassNotFoundException:DLFileEntryImpl

    在我的 6 1 0 Portal 实例上 带有使用 ServiceBuilder 和 DL Api 的 6 1 0 SDK Portlet 这一行 DynamicQuery query DynamicQueryFactoryUtil for
  • 无法解析插件 Java Spring

    我正在使用 IntelliJ IDEA 并且我尝试通过 maven 安装依赖项 但它给了我这些错误 Cannot resolve plugin org apache maven plugins maven clean plugin 3 0
  • 十进制到八进制的转换[重复]

    这个问题在这里已经有答案了 可能的重复 十进制转换错误 https stackoverflow com questions 13142977 decimal conversion error 我正在为一个类编写一个程序 并且在计算如何将八进
  • 如何为俚语和表情符号构建正则表达式 (regex)

    我需要构建一个正则表达式来匹配俚语 即 lol lmao imo 等 和表情符号 即 P 等 我按照以下示例进行操作http www coderanch com t 497238 java java Regular Expression D
  • Java按日期升序对列表对象进行排序[重复]

    这个问题在这里已经有答案了 我想按一个参数对对象列表进行排序 其日期格式为 YYYY MM DD HH mm 按升序排列 我找不到正确的解决方案 在 python 中使用 lambda 很容易对其进行排序 但在 Java 中我遇到了问题 f
  • 在两个活动之间传输数据[重复]

    这个问题在这里已经有答案了 我正在尝试在两个不同的活动之间发送和接收数据 我在这个网站上看到了一些其他问题 但没有任何问题涉及保留头等舱的状态 例如 如果我想从 A 类发送一个整数 X 到 B 类 然后对整数 X 进行一些操作 然后将其发送
  • Java Integer CompareTo() - 为什么使用比较与减法?

    我发现java lang Integer实施compareTo方法如下 public int compareTo Integer anotherInteger int thisVal this value int anotherVal an
  • 仅将 char[] 的一部分复制到 String 中

    我有一个数组 char ch 我的问题如下 如何将 ch 2 到 ch 7 的值合并到字符串中 我想在不循环 char 数组的情况下实现这一点 有什么建议么 感谢您花时间回答我的问题 Use new String value offset
  • 无法捆绑适用于 Mac 的 Java 应用程序 1.8

    我正在尝试将我的 Java 应用程序导出到 Mac 该应用程序基于编译器合规级别 1 7 我尝试了不同的方法来捆绑应用程序 1 日食 我可以用来在 Eclipse 上导出的最新 JVM 版本是 1 6 2 马文 看来Maven上也存在同样的
  • 如何从终端运行处理应用程序

    我目前正在使用加工 http processing org对于一个小项目 但是我不喜欢它附带的文本编辑器 我使用 vim 编写所有代码 我找到了 pde 文件的位置 并且我一直在从 vim 中编辑它们 然后重新打开它们并运行它们 重新加载脚
  • Android 中麦克风的后台访问

    是否可以通过 Android 手机上的后台应用程序 服务 持续监控麦克风 我想做的一些想法 不断聆听背景中的声音信号 收到 有趣的 音频信号后 执行一些网络操作 如果前台应用程序需要的话 后台应用程序必须能够智能地放弃对麦克风的访问 除非可
  • 在mockito中使用when进行模拟ContextLoader.getCurrentWebApplicationContext()调用。我该怎么做?

    我试图在使用 mockito 时模拟 ContextLoader getCurrentWebApplicationContext 调用 但它无法模拟 here is my source code Mock org springframewo
  • 在 Maven 依赖项中指定 jar 和 test-jar 类型

    我有一个名为 commons 的项目 其中包含运行时和测试的常见内容 在主项目中 我添加了公共资源的依赖项
  • 捕获的图像分辨率太大

    我在做什么 我允许用户捕获图像 将其存储到 SD 卡中并上传到服务器 但捕获图像的分辨率为宽度 4608 像素和高度 2592 像素 现在我想要什么 如何在不影响质量的情况下获得小分辨率图像 例如我可以获取或设置捕获的图像分辨率为原始图像分
  • 节拍匹配算法

    我最近开始尝试创建一个移动应用程序 iOS Android 它将自动击败比赛 http en wikipedia org wiki Beatmatching http en wikipedia org wiki Beatmatching 两

随机推荐

  • Android中如何获取内部存储的绝对路径

    内部存储路径 考虑上面的图片 它显示内部存储中的文件夹和文件 我的问题是我无法获取内部存储的绝对路径 我尝试过使用 字符串路径 getFilesDir getAbsolutePath 但它给了我应用程序存储的路径 我的目标是将文件从我的应用
  • powershell 无法识别 pipelinev

    我确定pipenv安装在以下路径中C Users Owner gt pip install pipenv 然后得到如下回复 Requirement already satisfied setuptools gt 36 2 1 in c us
  • R Shiny 自动开始下载

    我想在按下按钮时初始化 R Shiny 中文件的下载 并在生成文件之前进行一些检查 我用 downloadHandler 愚弄了周围 https shiny rstudio com gallery file download html 但我
  • Java:如何从 servlet 将文件上传到 WebDAV 服务器?

    我的 ajax 应用程序将文件从用户的浏览器上传到 Java 应用程序容器 我想做的是 上传完成后 我想将文件 发送 到 WebDAV 服务器 由主机名 即 localhost 端口 即 8080 和我想要的位置标识存储文件 即 dir1
  • 如何打开Neo4J Webadmin进行远程控制?

    我已经在我的服务器上的端口 7474 上安装了 Neo4J 实例 我的域也在使用该服务器 并且我希望使用如下用户名和密码远程使用 webadmin example com 7474 有没有办法做到这一点 我在 Neo4J 文档中找不到任何指
  • LINQ to SQL:如何更新唯一字段而不检索整个实体

    当我知道实体 ID 时 我想更新实体的唯一字段 在 LINQ to SQL 中是否可以不检索完整实体 使用 DataContext 中的所有字段 这是开销 是否可以创建实体并将其附加到 DataContext 并标记要在 DataConte
  • Mongoid 和 Rails 的字段别名

    MongoDB 中的常见做法是使用短键名来节省空间 例如 人们可能想使用 fn 而不是 first name 然而 在你的应用程序中 如果你到处使用 fn 你就完蛋了 太丑了 特别是对于 Rails 在 Mongoid 中声明字段时是否有一
  • 游戏点和框的数据结构

    什么是一个好的数据结构来表示游戏的状态点和框 我想出了使用 2 个布尔矩阵来表示水平线和垂直线 但也许有一种更优雅的方法来做到这一点 以及操作 add line 检查线 方格 使用一对二维布尔数组 称为linesX and linesY我感
  • 直接从 Perforce 命令行更改工作区 clobber 选项

    如何从命令行更改 perforce 规格 我想做的是 我有一个工作区 其 clobber 选项设置为noclobber 默认值 现在我想把它改成clobber 我知道我可以直接从p4v 但我不想要那样 我也知道如果我跑p4 client 它
  • 使用arm-linux-androideabi-gcc编译对象时出现问题

    背景 OSX 是操作系统 R8 NDK 我正在尝试使用 Android GCC 编译器编译以下类 include
  • 在 Pyramid 中,如何根据上下文内容使用不同的渲染器?

    我有 3 种不同的产品页面布局 我想根据有关产品的可用信息来显示它们 使用遍历我有一个名为ProductFinder获取所有信息 例如 用户转到domain green small 并ProductFinder将列出我的数据库中所有绿色和小
  • lua脚本错误检查

    是否可以在不执行lua脚本的情况下检查它是否包含错误 我有以下代码 if luaL loadbuffer L data size name fprintf stderr s lua tostring L 1 lua pop L 1 if l
  • 在 Kivy 中从内存加载图像

    我内存中有一张图片格式 从pyplot输出 我想通过Kivy直接在Android上显示它 但我不想创建图片文件 有什么办法可以做到这一点吗 在 pyplot 上 我可以通过编写对象来生成类似对象的文件 但我不知道如何将其放入 Kivy 中
  • 在策略定义中返回响应时如何使用变量?

    我正在 Azure API 管理的实例中配置入站策略 首先 我设置一个变量
  • 在哪里可以找到有关 XSLT 文件的优秀教程? [关闭]

    Closed 这个问题不符合堆栈溢出指南 目前不接受答案 我正在编写两种 XML 文件类型之间的翻译 并且想知道在哪里可以找到有关此过程的一些好的教程 Thanks 教程 Update 我很高兴添加这个最新的 XSLT 教程 XSLT 2
  • jqGrid过滤记录

    似乎这里有一些关于这个主题的问题 他们有一些很好的答案 但我的情况似乎有点不同 我需要过滤 jqGrid 中显示的记录 但完全是在客户端 由于多种原因 填充网格的最佳方法是使用直接发送到页面上的 JavaScript 中的数组 网格本身根本
  • 我可以在客户端更改页面的 HTML 状态代码吗?

    我有一个静态 HTML 网页 我想将其状态代码设置为404 未找到 但是 我想使用 javascript 或 jQuery 而不是任何服务器端语言来完成此操作 我如何在客户端上执行此操作 使用 javascript 或者也许 tag 无法使
  • 使用 PDO 清理 MySQL 中输入的正确方法

    所以我有一个朋友尝试在我的网站上运行 SQL 注入 他成功地使用下面的代码进入了它 我怎样才能防止这种情况发生 我读过一些有关清理变量的内容 但我该如何做到这一点 INSERT INTO 登录 用户名 密码 VALUES Gjertsmel
  • 如何在Retrofit Android的请求正文中传递带有空值或空字符串的键

    即使没有值 我也需要传递密钥 因为密钥在服务器端是强制性的 但 Retrofit 在发送请求时删除了具有空值的键 如何使用 Retrofit 向服务器发送没有值的密钥 请求正文如下所示 first name testlogin last n
  • HttpSession 超时后重定向

    我一直在查看有关此主题的许多帖子 但无法找到适合我的情况的解决方案 我正在使用 Java EE 6 和 JSF 2 0 部署在 JBoss AS 7 1 上 In my web xml I have