成功通过身份验证后,Spring Security返回匿名用户

时间:2020-11-04 11:21:30

标签: java spring spring-boot kotlin spring-security

我是Spring Security的新手,并且想要获取当前用户的用户名。到目前为止,身份验证仍然有效,但是当尝试获取用户的当前用户名时,我得到了anonymousUser

我正在使用Kotlin。

这是我正在尝试的:

SecurityConfig.kt:

@Configuration
@EnableWebSecurity(debug = true)
class SecurityConfig(): WebSecurityConfigurerAdapter(){

    @Throws(Exception::class)
    override fun configure(auth: AuthenticationManagerBuilder){

        auth.inMemoryAuthentication()
            .withUser("user").password("123456").roles("USER")
            .and()
            .withUser("admin").password("123456").roles("USER", "ADMIN")
    }

    @Throws(Exception::class)
    override fun configure(http: HttpSecurity){ 

        http.authorizeRequests()
           .antMatchers("v1/mobile/**")
           .authenticated().and().httpBasic()
    }

...
}

AuthorizationServerConfig.kt:

//class header not shown here

    @Throws(Exception::class)
    override fun configure(clients: ClientDetailsServiceConfigurer){
        clients
            .inMemory()
            .withClient("spiritdev")
            .secret("thisissecret")
            .authorities("USER","ADMIN")
            .scopes("all")
            .authorizedGrantTypes("password","client_credentials")
    }

首先,我像这样在Postman中进行身份验证:

enter image description here

这很好。但是使用http://localhost:8080/v1/mobile/tickets之类的方法记录当前用户名(以下代码)时:

var currentPrincipalName: String? = 
SecurityContextHolder.getContext().authentication.principal.toString()

logger.info { "currentPrincipalName!" }
logger.info { currentPrincipalName }

输出显示anonymousUser

我不明白为什么。谁能告诉我我做错了什么?谢谢您的帮助!

1 个答案:

答案 0 :(得分:0)

让我们尝试禁用匿名身份验证-

http .csrf().disable()
            .formLogin().disable()
            .anonymous().disable()
            .authorizeRequests()
            .antMatchers("v1/mobile/**")
            .authenticated().and().httpBasic()

我假设您正在使用正确的令牌作为自动身份验证标头,以响应auth令牌端点请求,如屏幕截图所示。