在Spring中重定向已登录的用户

时间:2014-03-26 13:48:55

标签: 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").permitAll()           
            .antMatchers("/public/**").permitAll()
            .antMatchers("/signup").permitAll()
            .anyRequest().authenticated()
            .and()
        .formLogin()
            .loginPage("/login")
            .defaultSuccessUrl("/landing")
            .permitAll()
        //...
}

现在,我只提出一个问题:如何将已登录的用户从/ login重定向到/登录页面?我是否要在控制器内或配置类中检查这种情况,如上所示?

2 个答案:

答案 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()