Как перенаправить на другую страницу, когда уже авторизованный пользователь заходит на страницу входа - PullRequest
6 голосов
/ 23 ноября 2011

Мне было интересно, можно ли перенаправить пользователей, если определенная c:if клаузула true?

<c:if test="#{loginController.authenticated}">
 //redirect to index page
</c:if>

Ответы [ 2 ]

9 голосов
/ 23 ноября 2011

Да, это возможно.

Но я бы предложил вам применить фильтр для /login.jsp и в фильтре переслать на другую страницу, если пользователь уже вошел в систему.

Вот пример, который говорит, как сделать это, используя фильтр:

public class LoginPageFilter implements Filter
{
   public void init(FilterConfig filterConfig) throws ServletException
   {

   }

   public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse,   FilterChain filterChain) throws IOException, ServletException
   {
       HttpServletRequest request = (HttpServletRequest) servletRequest;
       HttpServletResponse response = (HttpServletResponse) servletResponse;

       if(request.getUserPrincipal() != null){ //If user is already authenticated
           response.sendRedirect("/index.jsp");// or, forward using RequestDispatcher
       } else{
           filterChain.doFilter(servletRequest, servletResponse);
       }
   }

   public void destroy()
   {

   }
}

Добавить этот фильтр в файл web.xml

<filter>
    <filter-name>LoginPageFilter</filter-name>
    <filter-class>
        com.sample.LoginPageFilter
    </filter-class>
    <init-param>
       <param-name>test-param</param-name>
       <param-value>This parameter is for testing.</param-value>
    </init-param>
</filter>

<filter-mapping>
    <filter-name>LoginPageFilter</filter-name>
    <url-pattern>/login.jsp</url-pattern>
</filter-mapping>
5 голосов
/ 23 ноября 2011

Помимо подхода Filter, вы также можете использовать <f:event type="preRenderView">.Поместите это где-нибудь сверху представления:

<f:event type="preRenderView" listener="#{loginController.checkAuthentication}" />

И добавьте этот метод слушателя к LoginController:

public void checkAuthentication() throws IOException {
    ExternalContext externalContext = FacesContext.getCurrentInstance().getExternalContext();

    if (externalContext.getUserPrincipal() != null) {
        externalContext.redirect(externalContext.getRequestContextPath() + "/index.xhtml");
    }
}

Вот и все.

Смотрите также

...