我不希望经过身份验证的用户访问登录页面。如果用户已经通过身份验证,处理“ /登录”重定向的正确方法是什么?说,如果已经登录,我想重定向到“ / 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}")在这种情况下,你可以实现这个逻辑,以及:
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"; }