Подтвердить что ты не робот

Spring Безопасность - перенаправление, если он уже зарегистрирован

Я новичок в Spring:

Я не хочу, чтобы аутентифицированный пользователь обращался к странице входа. Каков правильный способ обработки переадресации для "/login", если пользователь уже прошел аутентификацию? Скажем, я хочу перенаправить на "/index", если он уже вошел в систему.

Я попробовал "isAnonom()" при входе в систему, но перенаправляет страницу доступа на отказ.

<security:http auto-config="true" use-expressions="true" ...>
    <form-login login-processing-url="/resources/j_spring_security_check"
                 default-target-url="/index"
                login-page="/login" authentication-failure-url="/login?login_error=t" />
    <logout logout-url="/resources/j_spring_security_logout"  />
   ...
  <security:intercept-url pattern="/login" access="permitAll" />
  <security:intercept-url pattern="/**" access="isAuthenticated()" />
</security:http>
4b9b3361

Ответ 1

В функции контроллера вашей страницы входа:

  • проверьте, зарегистрирован ли пользователь.

  • затем переместите его на страницу индекса в этом случае.

Соответствующий код:

Authentication auth = SecurityContextHolder.getContext().getAuthentication();

if (!(auth instanceof AnonymousAuthenticationToken)) {

    /* The user is logged in :) */
    return new ModelAndView("forward:/index");
}

Ответ 2

Для успешной переадресации с страницы входа, если пользователь уже выполнил вход в систему, добавьте следующее в свой login.jsp:

Добавьте заголовок taglib безопасности в начало jsp:

<%@taglib uri="http://www.springframework.org/security/tags" prefix="sec"%>

Затем добавьте следующий тег внутри своего "головного" тега (желательно около вершины):

<sec:authorize access="isAuthenticated()">
    <% response.sendRedirect("main"); %>
</sec:authorize>

Это приведет к перенаправлению на main.html(или независимо от вашего основного .jsp), если пользователь, который заходит на страницу входа в систему, уже зарегистрирован.

Выполнение этого с помощью контроллера не сработало для меня, поскольку действительная практика входа в систему заключается в том, чтобы позволить

login bean bean выполнить всю работу перенаправления, поэтому не было контроллера входа для меня изменить.

Ответ 3

login.xhtml

<h:head >
    <f:metadata>
      <f:event type="preRenderView" listener="#{loginBean.onPageLoad}"/>
  </f:metadata>
</h:head>

loginBean

public void onPageLoad(){
    Authentication auth = SecurityContextHolder.getContext().getAuthentication();
    if (!(auth instanceof AnonymousAuthenticationToken)) {
        try {
            FacesContext.getCurrentInstance().getExternalContext().redirect(url);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

Ответ 4

эй, ты можешь это сделать.

<h:head>
<sec:authorize access="isAuthenticated()">
    <meta http-equiv="refresh" content="0;url=http://your index.xhtml url (full url)" /> 
</sec:authorize>
</h:head>

Этот метод очень прост и удобен, не так ли?