权限校验会调用 DelegatingReactiveAuthorizationManager -> check方法。DelegatingReactiveAuthorizationManager 里的mappings保存的是pathMatcher和对应的权限。
思路是拿到mappings,每次清空再重新添加。
把ServerHttpSecurity里的authorizeExchangeSpec替换为自定义的,authorizeExchangeSpec的configure方法里创建AuthorizationWebFilter的时候,将自定义mappings传入,替换默认的。
// 路径,权限对应关系
List<ServerWebExchangeMatcherEntry<ReactiveAuthorizationManager<AuthorizationContext>>> mappings = new CopyOnWriteArrayList<>();
@Bean
public SecurityWebFilterChain springSecurityFilterChain(ServerHttpSecurity http) throws Exception {
mappings.add(new ServerWebExchangeMatcherEntry(ServerWebExchangeMatchers.pathMatchers("/user/list"),
AuthorityReactiveAuthorizationManager.hasAnyRole("admin")));
ServerHttpSecurity.AuthorizeExchangeSpec exchangeSpec = http.new AuthorizeExchangeSpec();