我认为没有像Spring的早期版本中那样有X509过滤器,因此您必须实现自己的版本。幸运的是,
org.springframework.security.web.server.authentication.AuthenticationWebFilter该工具为身份验证流程提供了模式,但是您必须自己从证书/请求中提取主题。
您要做的第一件事是设置身份验证转换器,以从证书中提取主题。
public class X509AuthenticationConverter implements Function<ServerWebExchange, Mono<Authentication>> { @Override public Mono<Authentication> apply(ServerWebExchange exchange) { ServerHttpRequest request = exchange.getRequest(); try {// extract credentials hereAuthentication authentication = ...return Mono.just(authentication); } catch (Exception e) {// log error herereturn Mono.empty(); } }}现在在我们的配置中,我们创建过滤器和转换器bean,并将转换器设置到过滤器中。
@Beanpublic X509AuthenticationConverter x509AuthenticationConverter() { return new X509AuthenticationConverter();}@Beanpublic AuthenticationWebFilter x509AuthenticationWebFilter(ReactiveAuthenticationManager reactiveAuthenticationManager, X509AuthenticationConverter x509AuthenticationConverter) { AuthenticationWebFilter authenticationWebFilter = new AuthenticationWebFilter(reactiveAuthenticationManager); authenticationWebFilter.setAuthenticationConverter(x509AuthenticationConverter); return authenticationWebFilter;}最后配置安全性
@BeanSecurityWebFilterChain springWebFilterChain(ServerHttpSecurity http, AuthenticationWebFilter x509AuthenticationWebFilter) { return http .addFilterAt(x509AuthenticationWebFilter, SecurityWebFiltersOrder.AUTHENTICATION) //... .build();}这将与其他身份验证机制一样有效。



