8.4.2. WebFlux 安全

与 Spring MVC 应用程序类似,您可以通过添加spring-boot-starter-security依赖项来保护您的 WebFlux 应用程序。默认安全配置在ReactiveSecurityAutoConfigurationUserDetailsServiceAutoConfiguration中实现。 ReactiveSecurityAutoConfiguration导入WebFluxSecurityConfiguration用于 Web 安全以及UserDetailsServiceAutoConfiguration配置身份验证,这在非 Web 应用程序中也相关。

要完全关闭默认的 Web 应用程序安全配置,您可以添加WebFilterChainProxy类型的 bean (这样做不会禁用UserDetailsService配置或 Actuator 的安全性)。要关闭UserDetailsService配置,您可以添加类型为ReactiveUserDetailsServiceReactiveAuthenticationManager的bean 。

当以下任何 Spring Security 模块位于类路径上时,自动配置也会停止:

  • spring-security-oauth2-client

  • spring-security-oauth2-resource-server

要在这些依赖项中的一个或多个依赖项之外使用 ReactiveUserDetailsService,请定义您自己的 MapReactiveUserDetailsService bean。

访问规则和多个 Spring Security 组件(例如 OAuth 2 客户端和资源服务器)的使用可以通过添加自定义SecurityWebFilterChainbean 来配置。Spring Boot 提供了方便的方法,可用于覆盖执行器端点和静态资源的访问规则。 EndpointRequest可以用来创建一个基于management.endpoints.web.base-path属性的ServerWebExchangeMatcher

PathRequest可用于在常用位置创建ServerWebExchangeMatcher资源。

例如,您可以通过添加以下内容来自定义安全配置:

@Configuration(proxyBeanMethods = false)
public class MyWebFluxSecurityConfiguration {

    @Bean
    public SecurityWebFilterChain springSecurityFilterChain(ServerHttpSecurity http) {
        http.authorizeExchange((exchange) -> {
            exchange.matchers(PathRequest.toStaticResources().atCommonLocations()).permitAll();
            exchange.pathMatchers("/foo", "/bar").authenticated();
        });
        http.formLogin(withDefaults());
        return http.build();
    }

}

最后更新于