2

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.?

4

3 回答 3

5

您可以更改会话超时,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 代表该方法。

于 2011-05-30T11:56:08.917 回答
1

自动 - 没有。

你必须:

  • 将所有会话存储在Set. HttpSessionListener在创建它们时执行此操作。
  • 在给定时间(例如使用石英).invalidate()它们
于 2011-05-28T19:37:55.667 回答
1

Bozho 给您的是正确的,您最有可能看到的是,当您按下注销按钮时,会话被破坏,但是 servlet 容器随后被定向到“注销后”页面,这会自动导致会话要创建(因此“会话已销毁”后跟“会话已创建”)。

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

于 2011-05-30T09:59:48.870 回答