Вы можете изменить время ожидания сеанса на 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 сеанс доступен по ExternalContext#getSession()
:
HttpSession session = (HttpSession) FacesContext.getCurrentInstance().getExternalContext().getSession();
// ...
Или, когда вы уже используете JSF 2.1, вы также можете использовать новый ExternalContext#setSessionMaxInactiveInterval()
, который делегирует именно этому методу.