spring-security 端点的状态代码始终为401,即使已登录也是如此,为什么?

pdkcd3nj  于 2022-11-11  发布在  Spring
关注(0)|答案(1)|浏览(373)

我有两个端点:/login/welcome
如果用户已通过身份验证,则他们应该只能访问端点/welcome
我的问题是,在浏览器中,/welcome的状态总是401,即使/login之前的状态是200。

Angular

public login(): Observable<any> {
  const headers = new HttpHeaders({
    Authorization: 'Basic ' + window.btoa('linda:pass')
  })
  return this.http.get(environment.apiBaseUrl + 'login', { headers, responseType: 'text' as 'json' })
}

public welcome(): Observable<any> {
  return this.http.get(environment.apiBaseUrl + 'welcome');
}

Spring Boot

第一个
我做错了什么?

slwdgvem

slwdgvem1#

Spring安全表达式hasRole("ADMIN")将在授权规则中添加ROLE_前缀(可以配置为不同),因此它期望角色为ROLE_ADMIN,而您定义的用户管理器为.roles("ADMIN"),这将违反您定义的授权规则,因此您将得到401未授权响应。
如果不想更改角色的名称,可以使用另一个Spring安全表达式hasAuthority(..)
有关详细信息,请查看文档

相关问题