在Spring中重定向已登录的用户
我使用此Java配置是为了使用Spring Boot+Spring Security管理http路由:在Spring中重定向已登录的用户,spring,spring-security,spring-boot,Spring,Spring Security,Spring Boot,我使用此Java配置是为了使用Spring Boot+Spring Security管理http路由: @Override protected void configure(HttpSecurity http) throws Exception { http .authorizeRequests() .antMatchers("/").permitAll() .antMatchers("/home").permitAl
@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重定向到/landing页面?我必须在控制器内部或在如上所示的配置类中检查此情况吗?您可以在/login“端点中处理此情况。类似这样的情况如何:
@RequestMapping("/login")
public String login(Principal principal) {
if (principal!=null && ((Authentication)principal).isAuthenticated()) {
return "forward:/landing";
}
return "login";
}
或者我想您可以添加一个过滤器(似乎有些过分)。您可以在/login“端点中处理该问题。像这样的怎么样:
@RequestMapping("/login")
public String login(Principal principal) {
if (principal!=null && ((Authentication)principal).isAuthenticated()) {
return "forward:/landing";
}
return "login";
}
或者我想你可以添加一个过滤器(看起来有些过分)。你可以这样做:
@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()
您可以这样做:
@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()
你能更详细地描述一下你想要的流程,以及你看到的是什么吗?在我看来,访问“/login”的用户将获得一个表单,如果他提交成功,他将被转发到“/landing”。这不是你想要的。如果这个用户已经登录并进入“/login”,我希望系统将他重定向到“/landing”。你能更详细地描述一下你想要的流程,以及你看到的是什么吗?在我看来,访问“/login”的用户将获得一个表单,如果他提交成功,他将被转发到“/landing”。这不是你想要的。如果这个用户已经登录并进入“/login”,我希望系统在“/landing”上重定向他。