以编程方式更改会话超时



我可以在定义的非活动时间后注销用户。

<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")。

如果不创建自己的会话处理系统,我不知道你会如何解决这个问题。(我以前遇到过这个问题,在我们创建自己的会话系统后它就消失了)

相关内容

  • 没有找到相关文章

最新更新