我可以在定义的不活动时间后退出用户。
<session-timeout>240</session-timeout>
但是,是否有某种方法可以在指定时间内注销,或者更好,例如在指定时间后5分钟不活动。?
答案 0 :(得分:4)
您可以将会话超时更改为HttpSession#setMaxInactiveInterval()
,其中您可以以秒为单位指定所需的超时。
如果您想要涵盖广泛的请求,例如文件夹/admin
中的所有页面或其他内容,然后执行此操作的最佳位置是创建Filter
,该ExternalContext#setSessionMaxInactiveInterval()
映射在FacesServlet
上,大致执行以下作业:
@Override
public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain) throws ServletException, IOException {
HttpServletRequest request = (HttpServletRequest) req;
HttpSession session = request.getSession();
if (request.getRequestURI().startsWith("/admin/")) {
session.setMaxInactiveInterval(60 * 5); // 5 minutes.
} else {
session.setMaxInactiveInterval(60 * 240); // 240 minutes.
}
chain.doFilter(req, res);
}
在JSF托管bean中,会话由ExternalContext#getSession()
提供:
HttpSession session = (HttpSession) FacesContext.getCurrentInstance().getExternalContext().getSession();
// ...
或者当您已经使用JSF 2.1时,您也可以使用新的{{3}}代理该方法。
答案 1 :(得分:1)
自动 - 否。
你必须:
Set
中。在创建它们时在HttpSessionListener
中执行此操作。.invalidate()
他们答案 2 :(得分:1)
Bozho给你的是正确的,你看到的最有可能的是,当你按下你的注销按钮时,会话被破坏,但是servlet容器被引导到“post logout”页面,它自动导致会话被创建(因此“Session Destroyed”后跟“Session Created”)。
如果没有创建自己的会话处理系统,我不知道如何解决这个问题。 (我以前遇到过这个问题,在我们创建自己的会话系统后它就消失了)