jsf - 以编程方式更改 session 超时

标签 jsf servlets web.xml session-timeout programmatic-config

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

<session-timeout>240</session-timeout> 

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

最佳答案

您可以通过 HttpSession#setMaxInactiveInterval() 更改 session 超时您可以在其中指定所需的超时时间(以秒为单位)。

当您想涵盖广泛的请求时,例如文件夹 /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 中, session 可通过 ExternalContext#getSession() 获得:

HttpSession session = (HttpSession) FacesContext.getCurrentInstance().getExternalContext().getSession();
// ...

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

关于jsf - 以编程方式更改 session 超时,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6163922/

相关文章:

java - PrimeFaces 日历接受无效日期作为输入

java - 为什么在 Java servlet 的 session 中设置属性有时会失败?

java - 通过在eclipse中设置断点来调试ServletContextListener.contextDestroyed()

java - 我的 web.xml 不知道 taglib 标签

java - org.springframework.beans.factory.NoSuchBeanDefinitionException : No bean named 'authenticationManager' is defined

javascript - 在上下文菜单 PrimeFaces 中右键单击后获取值

jsp - 防止用户在注销后看到以前访问过的安全页面

java - 如何在 web.xml 之外动态配置 WebLogicCluster 属性

JAVA:无法获取过滤器中的上下文参数

eclipse for java-如何将对 jsf 2.1 的支持添加到 eclipse 3.7-indigo