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>
Ответы
Ответ 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>
Этот метод очень прост и удобен, не так ли?