以编程方式更改会话超时

gaf*_*fcz 2 jsf web.xml servlets session-timeout programmatic-config

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

<session-timeout>240</session-timeout> 
Run Code Online (Sandbox Code Playgroud)

但是,是否有某种方法可以在指定时间或更好的情况下注销,例如直到指定时间后 5 分钟不活动。?

Bal*_*usC 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);
}
Run Code Online (Sandbox Code Playgroud)

在 JSF 托管 bean 中,会话可通过ExternalContext#getSession()以下方式获得:

HttpSession session = (HttpSession) FacesContext.getCurrentInstance().getExternalContext().getSession();
// ...
Run Code Online (Sandbox Code Playgroud)

或者,当您已经使用 JSF 2.1 时,您还可以使用ExternalContext#setSessionMaxInactiveInterval()委托给该方法的新方法。