Spring Security-如果已经登录,则重定向
我不希望经过身份验证的用户访问登录页面。如果用户已经通过身份验证,处理“ /登录”重定向的正确方法是什么?说,如果已经登录,我想重定向到“ / index”。
我已经在登录时尝试过’isAnonomous()’,但是它重定向到访问被拒绝的页面。
<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>
回答:
在登录页面的控制器功能中:
检查用户是否已登录。
然后在这种情况下将他转发/重定向到索引页面。
相关代码:
Authentication auth = SecurityContextHolder.getContext().getAuthentication();if (!(auth instanceof AnonymousAuthenticationToken)) {
/* The user is logged in :) */
return new ModelAndView("forward:/index");
}
更新资料
或者在映射可以含有另一种情况path variable
就像@GetMapping(path = "/user/{id}")
在这种情况下,你可以实现这个逻辑,以及:
@GetMapping(value = "/login")public String getLogin() throws Exception {
Authentication auth = SecurityContextHolder.getContext().getAuthentication();
if (!(auth instanceof AnonymousAuthenticationToken)) {
User loggedInUser = userService.findByEmail(auth.getName())
.orElseThrow(Exception::new);
/* The user is logged in :) */
return "redirect:/user/" + loggedInUser.getUserId();
}
return "login";
}
以上是 Spring Security-如果已经登录,则重定向 的全部内容, 来源链接: utcz.com/qa/428244.html