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>

回答:

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

  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";

}

以上是 Spring Security-如果已经登录,则重定向 的全部内容, 来源链接: utcz.com/qa/428244.html

回到顶部