- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我一直在查看有关此主题的许多帖子,但找不到适合我的解决方案。
我正在使用 Java EE 6 和 JSF 2.0(部署在 JBoss AS 7.1 上)
在我的 web.xml
中我有:
<session-config>
<session-timeout>1</session-timeout>
</session-config>
并且我希望在 session 自动超时时将用户重定向到登录页面。
我尝试过的:
方法一:使用过滤器
我试过以下过滤器:
@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() {
}
}
在web.xml
我试过了
<filter-mapping>
<filter-name>TimeOutFilter</filter-name>
<url-pattern>*.xhtml</url-pattern>
</filter-mapping>
和
<filter-mapping>
<filter-name>TimeOutFilter</filter-name>
<servlet-name>Faces Servlet</servlet-name>
</filter-mapping>
过滤器在每次请求时都会被调用(在控制台中记录“fiter called”)。 但是当 session 超时时它不会被调用。
方法二:HttpSessionLister
我尝试使用 HttpSessionListerner
。调用的方法具有以下签名:
public void sessionDestroyed(HttpSessionEvent se) {
}
我无法重定向到特定页面。当我想重定向用户时,我通常使用 FacesContext
中的 NavigationHandler
但在这种情况下没有 FacesContext
(FacesContext. getCurrentInstance()
返回 null
)。
根据这个post ,HttpListener 无法重定向用户,因为它不是请求的一部分。
问题
解决这个问题的最佳方法是什么?我该怎么做才能使上述两种方法中的一种起作用?
最佳答案
只要客户端未发送 HTTP 请求,您就无法发送 HTTP 响应。就那么简单。这就是 HTTP 的工作原理。如果任何网站能够在没有客户端请求的情况下不经意地推送 HTTP 响应,那么 Internet 看起来会非常不同。
基于客户端键盘/鼠标 Activity 的基于 JavaScript 的心跳,如回答 here ,或元 refresh
header ,如回答 here如果您基本上是一个单页 Web 应用程序(因此,您实际上没有使用 session 范围而是使用 View 范围),这将是解决方案,但如果您在多个选项卡中打开页面,那将不会很好地工作/同一 session 中的窗口。
从理论上讲,Websockets 是向客户端推送内容的正确解决方案,但这反过来又需要一个 Activity session 。先有鸡还是先有蛋的问题。此外,它不适用于目前仍相对广泛使用的旧版浏览器,因此它目前应该仅用于渐进式增强。
最好的办法是只定义一个错误页面来处理最终用户在 session 过期时调用操作的情况。另见 javax.faces.application.ViewExpiredException: View could not be restored .
关于java - HttpSession 超时后重定向,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15573221/
我正在尝试使用谷歌浏览器的 Trace Event Profiling Tool分析我正在运行的 Node.js 应用程序。选择点样本后,我可以在三种 View 之间进行选择: 自上而下(树) 自上而
对于一个可能是菜鸟的问题,我们深表歉意,但尽管在 SO 上研究了大量教程和其他问题,但仍找不到答案。 我想做的很简单:显示一个包含大量数据库存储字符串的 Android ListView。我所说的“很
我已经开始了一个新元素的工作,并决定给 Foundation 5 一个 bash,看看它是什么样的。在创建带有水平字段的表单时,我在文档中注意到的第一件事是它们使用大量 div 来设置样式。所以我在下
我有一个 Windows 窗体用户控件,其中包含一个使用 BeginInvoke 委托(delegate)调用从单独线程更新的第 3 方图像显示控件。 在繁重的 CPU 负载下,UI 会锁定。当我附加
我有一堆严重依赖dom元素的JS代码。我目前使用的测试解决方案依赖于 Selenium ,但 AFAIK 无法正确评估 js 错误(addScript 错误不会导致您的测试失败,而 getEval 会
我正在制作一款基于滚动 2D map /图 block 的游戏。每个图 block (存储为图 block [21][11] - 每个 map 总共 231 个图 block )最多可以包含 21 个
考虑到以下情况,我是前端初学者: 某个 HTML 页面应该包含一个沉重的图像(例如 - 动画 gif),但我不想强制客户缓慢地等待它完全下载才能享受一个漂亮的页面,而是我更愿意给他看一个轻量级图像(例
我正在设计一个小软件,其中包括: 在互联网上获取资源, 一些用户交互(资源的快速编辑), 一些处理。 我想使用许多资源(它们都列在列表中)来这样做。每个都独立于其他。由于编辑部分很累,我想让用户(可能
我想比较两个理论场景。为了问题的目的,我简化了案例。但基本上它是您典型的生产者消费者场景。 (我关注的是消费者)。 我有一个很大的Queue dataQueue我必须将其传输给多个客户端。 那么让我们
我有一个二元分类问题,标签 0 和 1(少数)存在巨大不平衡。由于测试集带有标签 1 的行太少,因此我将训练测试设置为至少 70-30 或 60-40,因此仍然有重要的观察结果。由于我没有过多地衡量准
我是一名优秀的程序员,十分优秀!