我使用此Java配置以使用Spring Boot + Spring Security管理http路由:
@Override
protected void configure(HttpSecurity http) throws Exception {
http
.authorizeRequests()
.antMatchers("/").permitAll()
.antMatchers("/home").permitAll()
.antMatchers("/public/**").permitAll()
.antMatchers("/signup").permitAll()
.anyRequest().authenticated()
.and()
.formLogin()
.loginPage("/login")
.defaultSuccessUrl("/landing")
.permitAll()
//...
}
现在,我只提出一个问题:如何将已登录的用户从/ login重定向到/登录页面?我是否要在控制器内或配置类中检查这种情况,如上所示?
答案 0 :(得分:3)
你可以在你的/ login“端点处理它。这样的事情怎么样:
@RequestMapping("/login")
public String login(Principal principal) {
if (principal!=null && ((Authentication)principal).isAuthenticated()) {
return "forward:/landing";
}
return "login";
}
或者我猜你可以添加一个过滤器(看起来有点过分)。
答案 1 :(得分:2)
你可以这样做:
@RequestMapping("/login")
public String login() {
Authentication auth = SecurityContextHolder.getContext().getAuthentication();
if (auth.getPrincipal() instanceof UserDetails) {
return "redirect:/landing";
} else return "login";
}
可以改变这个:
http
.authorizeRequests()
.antMatchers("/").permitAll()
.antMatchers("/home").permitAll()
.antMatchers("/public/**").permitAll()
.antMatchers("/signup").permitAll()
为此:
http
.authorizeRequests()
.antMatchers("/", "/home", "/public/**", "/signup").permitAll()