我的要求完全不同,实际上我已经在spring cloud api gateway(基于webflux)中添加了安全性,现在基本上我想在端点/testapi/上存在一些头值的基础上跳过oauth资源服务器完整流,否则oauth资源服务器流将在相同的端点/testapi上启动/
证券配置
@Autowired
private ReactiveAuthenticationManager manager;
@Bean
SecurityWebFilterChain springSecurityFilterChain(ServerHttpSecurity http) {
return http
.authorizeExchange()
.pathMatchers("/testAPI/**").authenticated()
.anyExchange().permitAll()
.and()
.securityContextRepository(NoOpServerSecurityContextRepository.getInstance())
.httpBasic().disable()
.formLogin().disable()
.csrf().disable()
.logout().disable()
.oauth2ResourceServer()
.jwt()
.authenticationManager(manager)
.and()
.and()
.addFilterBefore(new SecurityWebFilter(), SecurityWebFiltersOrder.AUTHENTICATION)
.build();
在securitywebfilter中,我尝试了使用自定义身份验证的reactivesecuritycontextholder.withauthentication(..),方法是将其设置为true,并使用
Mono<Authentication> authentication = ReactiveSecurityContextHolder.getContext().map(SecurityContext::getAuthentication)
.doOnSuccess(auth -> {
auth.setAuthenticated(true);
});
没有什么对我有效,我可以使用oauth服务器进行验证,但我希望在相同的端点上有条件地跳过它。
请帮忙,我是webflux和探索spring安全的新手。
1条答案
按热度按时间p4tfgftt1#
我创建了一个自定义匹配器
并在securityconfig中进行了相同的配置