Автоматический выход из системы в приложении JSF - PullRequest
1 голос
/ 01 октября 2009

У меня есть приложение JSF, и я хочу, чтобы пользователь автоматически выходил из системы после определенного периода бездействия. Есть ли стандартный способ сделать это?

1 Ответ

4 голосов
/ 01 октября 2009

Обычно сервер (Tomcat, Glassfish ...), на котором размещено веб-приложение, обрабатывает тайм-аут для сеанса.

Например, в Tomcat вы можете определить тайм-аут сеанса для определенного веб-приложения, добавив следующие строки в файле web.xml:

<session-config>
    <session-timeout>30</session-timeout>
</session-config>

Это установит тайм-аут на 30 минут.

Когда пользователь не отправляет запрос в течение времени, превышающего это заданное время ожидания, сеанс на сервере становится недействительным. Если пользователь пытается восстановить соединение после того, как сеанс был признан недействительным, он обычно будет перенаправлен на другую страницу или на страницу с ошибкой.

Вы можете разработать свой собственный фильтр JSF, который будет автоматически перенаправлять пользователя на страницу timeout.html. Вот пример такого фильтра:

public class TimeoutFilter implements Filter { 

    private static final String TIMEOUT_PAGE = "timeout.html"; 
    private static final String LOGIN_PAGE = "login.faces";  

    public void init(FilterConfig filterConfig) throws ServletException { 
    } 

    public void doFilter(ServletRequest request, ServletResponse response, FilterChain filterChain) throws IOException, ServletException { 
    if ((request instanceof HttpServletRequest) && (response instanceof HttpServletResponse)) { 
        HttpServletRequest requestHttp = (HttpServletRequest) request; 
        HttpServletResponse responseHttp = (HttpServletResponse) response; 
        if (checkResource(requestHttp)) {
            String requestPath = requestHttp.getRequestURI();
            if (checkSession(requestHttp)) { 
                String timeoutUrl = hRequest.getContextPath() + "/" + TIMEOUT_PAGE; 
                responseHttp.sendRedirect(timeoutUrl); 
                return; 
            } 
        } 
        filterChain.doFilter(request, response);
    } 

    private boolean checkResource(HttpServletRequest request) { 
        String requestPath = request.getRequestURI(); 
        return !(requestPath.contains(TIMEOUT_PAGE) || requestPath.contains(LOGIN_PAGE) || requestPath.equals(hRequest.getContextPath() + "/")); 
    } 

    private boolean checkSession(HttpServletRequest request) { 
        return request.getRequestedSessionId() != null && !request.isRequestedSessionIdValid(); 
    }

    public void destroy() { 
    } 

}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...