配置两个安全配置时出现未经授权的错误[重复]
Posted
技术标签:
【中文标题】配置两个安全配置时出现未经授权的错误[重复]【英文标题】:Unauthorized error while configuring two Security Configurations [duplicate] 【发布时间】:2021-08-12 22:57:30 【问题描述】:我正在通过扩展WebSecurityConfigurerAdaptor
来使用两个安全配置,如下所示
@Configuration
@Order(100)
public class CustomerSecurityAppConfiguration extends WebSecurityConfigurerAdapter
@Override
protected void configure(AuthenticationManagerBuilder auth) throws Exception
auth
.inMemoryAuthentication()
.withUser("user1")
.password("nooppassword")
.and()
.withUser("user2")
.password("nooppassword")
@Override
protected void configure(HttpSecurity http) throws Exception
http.csrf().disable();
http.cors().disable();
http
.authorizeRequests()
.antMatchers("/customers/**")
.anyRequest()
.authenticated()
.and()
.formLogin()
.and()
.httpBasic();
@Configuration
class EmployeeSecurityConfiguration extends WebSecurityConfigurerAdapter
@Override
protected void configure(AuthenticationManagerBuilder auth) throws Exception
auth
.inMemoryAuthentication()
.withUser("admin")
.password("nooppassword")
.roles("USER", "ADMIN")
.and()
.withUser("user")
.password("nooppassword")
.roles("USER");
@Override
protected void configure(HttpSecurity http) throws Exception
http.csrf().disable();
http.cors().disable();
http
.authorizeRequests()
.antMatchers(HttpMethod.GET, "/inventory/**")
.hasAnyRole("USER", "ADMIN")
.antMatchers(HttpMethod.POST, "/inventory/**")
.hasRole("ADMIN")
.anyRequest()
.authenticated()
.and()
.formLogin()
.and()
.httpBasic();
这里的想法是有两个realms
。一份给客户,一份给订单。当我发出 HTTP 请求时,我收到 /inventory
和 /customers
端点的 200 OK
响应,用户配置为 CustomerSecurityConfiguration
并收到 401
错误,这两个用户配置为 EmployeeSecurityConfiguration
配置。我有两个用于inventory
和customers
的REST 端点以及GET
和POST
。
我哪里错了?
【问题讨论】:
你可以查看AuthenticationManagerBuilder
build-up后面的spring实现源码,多个配置可能不会合并,可能会被覆盖。就像第二个加载的覆盖第一个一样。您是否在每个配置类中设置了断点?我猜EmployeeSecurityConfiguration
不起作用,因为它是在CustomerSecurityConfiguration
之前加载的
@Tiina 我能够弄清楚。两个安全过滤器链都必须配置为RequestMatcher
,否则默认为Requestmatcher
和any
。我们需要为不同的域创建单独的安全过滤器链。
【参考方案1】:
我必须像下面这样为 http 添加请求匹配器
http
.requestMatchers().antMatchers("/actuator/**")
.and()
.authorizeRequests()
.anyRequest()
.authenticated()
.and()
.formLogin()
.and()
.httpBasic();
【讨论】:
以上是关于配置两个安全配置时出现未经授权的错误[重复]的主要内容,如果未能解决你的问题,请参考以下文章
将 API 迁移到 .net Core 3 时出现 JWT 401 未经授权的错误
如何将 ResourceServer 添加到现有的 spring 安全配置
解决Jenkins权限配置错误,导致登录时出现没有Overall/read权限