小编典典

Spring Security-如果已经登录,则重定向

spring

我不希望经过身份验证的用户访问登录页面。如果用户已经通过身份验证,处理“ /登录”重定向的正确方法是什么?说,如果已经登录,我想重定向到“ / 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>

阅读 805

收藏
2020-04-20

共1个答案

小编典典

在登录页面的控制器功能中:

  1. 检查用户是否已登录。

  2. 然后在这种情况下将他转发/重定向到索引页面。

相关代码:

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";
}
2020-04-20