我们有一些端点是安全的,在访问它们之前,我们先验证jws是否正确。为了做到这一点,我们定义了一个SecurityContext,它实际上持久保存Auth pojo并在控制器的下游对其进行操作。 SecurityWebFilterChain配置如下所示:
@Bean
public SecurityWebFilterChain securityWebFilterChain(ServerHttpSecurity http) {
return http.csrf().disable()
.formLogin().disable()
.logout().disable()
.httpBasic().disable()
.securityContextRepository(securityContext)
.authorizeExchange()
.anyExchange().authenticated()
.and()
.build();
}
调用是在内部进行的,我们刚刚验证了jws令牌。
现在,一些外部客户需要与我们集成,并且我们需要验证jwe令牌。事实是,我们需要以某种方式告诉spring-security为存在的端点jws和为新端点jwe验证。
我尝试通过指定多个安全匹配器进行尝试,但失败了:(。您还有其他建议吗?
答案 0 :(得分:2)
您可以公开多个bean。我建议指定一个订单:
@Bean
@Order(1)
public SecurityWebFilterChain first(ServerHttpSecurity http) {
http
.securityMatcher(...)
...
return http.build();
}
@Bean
@Order(2)
public SecurityWebFilterChain second(ServerHttpSecurity http) {
http
.securityMatcher(...)
...
return http.build();
}
作为附带说明,Spring Security附带了对以反应方式验证JWS令牌的支持,您也许可以通过使用它来删除一些样板。