SecurityContextHolder.getContext()。getAuthentication()返回String

时间:2016-12-09 17:22:47

标签: java spring spring-boot spring-security

我正在Spring Boot项目中处理安全层,并面临以下问题:

SecurityContextHolder.getContext().getAuthentication() 

此代码返回:

  • 匿名用户
  • 的字符串“ anonymousUser
  • UserDetails经过身份验证的用户的对象

因此,我希望将此代码配置为针对这两种情况返回UserDetails。我该怎么办?

我想,我需要实现自定义AnonymousAuthenticationFilter。我对么?

1 个答案:

答案 0 :(得分:3)

  

我想,我需要实现自定义AnonymousAuthenticationFilter。   我是对的吗?

有一种更简单的方法,那就是HttpSecurity DSL的anonymous()方法。只需使用该块设置所需的principal

即可
@Configuration
public class SecurityConfig extends WebSecurityConfigurerAdapter {
    // other configuration methods

    @Override
    protected void configure(HttpSecurity http) throws Exception {
        UserDetails anonymousUserDetails = // your custom UserDetails for anonymous case
        http
                // other configurations
                .anonymous()
                    .principal(anonymousUserDetails);
    }
}

使用Null Object Pattern - ish方法对于匿名用户的自定义实现可能是一个好主意。