CORS spring 安全过滤器 vs WebMvcConfigurer.addCorsMappings

Jwo*_*Ker 2 spring spring-security cors

cors()filter类的configure方法WebSecurityConfigurerAdapter和 create beanWebMvcConfigurer和 overrideaddCorsMappings方法有什么区别?当我们使用哪个?谁能解释一下?

@Bean
public WebMvcConfigurer corsConfigurer() {
    return new WebMvcConfigurer() {
        @Override
        public void addCorsMappings(CorsRegistry registry) {
            registry.addMapping("/**")
                    .allowedOrigins("http://localhost:3000");
        }
    };
}
Run Code Online (Sandbox Code Playgroud)

对比

@Configuration
@EnableWebSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter {
    @Override
    protected void configure(HttpSecurity http) throws Exception {
        http.cors().and()
                .csrf().disable()
                .authorizeRequests()
                .mvcMatchers("/rest/**").authenticated()
                .anyRequest().permitAll()
                .and()
          .oauth2ResourceServer().jwt().jwtAuthenticationConverter(this.jwtAuthenticationConverter())
        ;
    }
Run Code Online (Sandbox Code Playgroud)

}

dur*_*dur 5

Spring Web MVC

WebMvcConfigurerSpring Web MVC库的一部分。配置 CORSaddCorsMappings将 CORS 添加到 Spring Web MVC 处理的所有 URL,参见1.7.2。处理

Spring MVCHandlerMapping实现为 CORS 提供了内置支持。成功将请求映射到处理程序后,HandlerMapping实现会检查给定请求和处理程序的 CORS 配置并采取进一步措施。

如果未使用 Spring Security(非安全应用程序)或并非所有 Spring Web MVC URL 都由 Spring Security 处理(某些 ULR 不安全),则必须使用它。

您不能将它用于非 Spring Web MVC URL,例如 JSF、Servlet、JAX-WS、JAX-RS...

春季安全

WebSecurityConfigurerAdapter Spring Security库的一部分。配置 CORScors()将 CORS 添加到 Spring Security 处理的所有 URL,请参阅15.8。科尔斯

Spring Framework 为 CORS 提供了一流的支持。CORS 必须在 Spring Security 之前处理,因为飞行前请求将不包含任何 cookie(即JSESSIONID)。如果请求不包含任何 cookie 并且 Spring Security 是第一个,则该请求将确定用户未通过身份验证(因为请求中没有 cookie)并拒绝它。

确保首先处理 CORS 的最简单方法是使用CorsFilter.

如果您使用 Spring Security,则必须使用它。

如果你同时使用 Spring Web MVC 和 Spring Security 可以共享配置,见15.8。科尔斯

如果您使用 Spring MVC 的 CORS 支持,则可以省略指定CorsConfigurationSource,Spring Security 将利用提供给 Spring MVC 的 CORS 配置。