我可以在定义的非活动时间后注销用户。
<session-timeout>240</session-timeout>
但是,有没有办法在指定时间内注销,或者更好,例如,在指定时间后不活动5分钟。?
您可以通过HttpSession#setMaxInactiveInterval()
更改会话超时,其中您可以以秒为单位指定所需的超时。
当你想覆盖广泛的请求时,例如文件夹/admin
或其他文件中的所有页面,那么最好的方法是创建一个映射在FacesServlet
上的Filter
,它大致完成以下工作:
@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();
// ...
或者,当您已经使用JSF2.1时,您也可以使用新的ExternalContext#setSessionMaxInactiveInterval()
,它正是委托给该方法的。
自动-无
你必须:
- 将所有会话存储在CCD_ 7中。创建它们时,请在
HttpSessionListener
中执行此操作 - 在给定的时间(例如使用石英)
.invalidate()
Bozhao给您的是正确的,您最可能看到的是,当您按下注销按钮时,会话正在被销毁,但servlet容器随后被引导到"注销后"页面,这会自动导致创建会话(因此,"session Destroyd"后面跟着"session created")。
如果不创建自己的会话处理系统,我不知道你会如何解决这个问题。(我以前遇到过这个问题,在我们创建自己的会话系统后它就消失了)