I can logout user after defined time of inactivity.
<session-timeout>240</session-timeout>
But, is there some way to logout in specified time, or better, for example until 5 minutes of inactivity after specified time.?
I can logout user after defined time of inactivity.
<session-timeout>240</session-timeout>
But, is there some way to logout in specified time, or better, for example until 5 minutes of inactivity after specified time.?
您可以更改会话超时,HttpSession#setMaxInactiveInterval()
您可以在其中指定所需的超时(以秒为单位)。
当您想要涵盖对此的广泛请求时,例如文件夹中的所有页面/admin
或其他内容,那么最好的地方是创建一个Filter
映射到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 时,您还可以使用 new ExternalContext#setSessionMaxInactiveInterval()
which 代表该方法。
自动 - 没有。
你必须:
Set
. HttpSessionListener
在创建它们时执行此操作。.invalidate()
它们Bozho 给您的是正确的,您最有可能看到的是,当您按下注销按钮时,会话被破坏,但是 servlet 容器随后被定向到“注销后”页面,这会自动导致会话要创建(因此“会话已销毁”后跟“会话已创建”)。
如果没有创建自己的会话处理系统,我不知道您将如何解决这个问题。(我过去遇到过这个问题,在我们创建自己的会话系统后它就消失了)