我可以在定义的不活动时间后注销用户。
<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/