【问题标题】:CORS spring security filter vs WebMvcConfigurer.addCorsMappingsCORS spring 安全过滤器与 WebMvcConfigurer.addCorsMappings
【发布时间】:2020-12-05 02:57:39
【问题描述】:

configure 类的configure 方法中的cors() 过滤器和创建WebMvcConfigurer 的bean 并覆盖addCorsMappings 方法有什么区别?我们什么时候用哪个?谁能解释一下?

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

对

@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())
        ;
    }

}

【问题讨论】:

标签: spring spring-security cors


【解决方案1】:

Spring Web MVC

WebMvcConfigurer 是Spring Web MVC 库的一部分。使用addCorsMappings 配置 CORS 会将 CORS 添加到 Spring Web MVC 处理的所有 URL,请参阅1.7.2. Processing:

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

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

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

Spring 安全性

WebSecurityConfigurerAdapter 是Spring Security 库的一部分。使用cors() 配置 CORS 会将 CORS 添加到 Spring Security 处理的所有 URL,请参阅15.8. CORS:

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

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

如果你使用 Spring Security,你必须使用它。

如果你同时使用 Spring Web MVC 和 Spring Security 可以共享配置,见15.8. CORS:

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

【讨论】:

    猜你喜欢
    • 2017-03-18
    • 2017-03-18
    • 2015-04-01
    • 2023-03-29
    相关资源
    最近更新 更多