Программно изменить время ожидания сеанса
Я могу выйти из системы после определенного времени бездействия.
<session-timeout>240</session-timeout>
Но есть ли способ выйти из системы в указанное время или лучше, например, до 5 минут бездействия после указанного времени?
3 ответа
Вы можете изменить время ожидания сессии 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()
который делегирует именно этому методу.
Автоматически - нет.
Вы должны были бы:
- хранить все сессии в
Set
, Сделать это вHttpSessionListener
когда они созданы. - в данное время (например, с использованием кварца)
.invalidate()
их
То, что Божо дал вам, верно, вы, скорее всего, видите, что когда вы нажимаете кнопку выхода из системы, сеанс уничтожается, но контейнер сервлета затем направляется на страницу "после выхода из системы", которая автоматически вызывает сеанс быть созданным (следовательно, "Session Destroyed", за которым следует "Session Created").
Если не считать вашей собственной системы обработки сессий, я не знаю, как бы вы справились с этим. (У меня была эта проблема в прошлом, и она исчезла после того, как мы создали нашу собственную систему сессий)