CORSSpring安全过滤器与WebMvcConfigurer.addCorsMappings

eqoofvh9  于 2023-03-11  发布在  Spring
关注(0)|答案(1)|浏览(135)

WebSecurityConfigurerAdapter类的configure方法中的cors()过滤器与WebMvcConfigurer的create bean和override 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())
        ;
    }

}

pbossiut

pbossiut1#

Spring Web MVC模式

WebMvcConfigurer是Spring Web MVC库的一部分。使用addCorsMappings配置CORS会将CORS添加到Spring Web MVC处理的所有URL,请参见1.7.2。处理:
Spring MVC HandlerMapping实现提供了对CORS的内置支持,在成功地将请求Map到处理程序之后,HandlerMapping实现检查给定请求和处理程序的CORS配置,并采取进一步的操作。
(For细粒度CORS配置,您可以使用@CrossOrigin。)
如果没有使用Spring Security(不安全的应用程序)或者不是所有的Spring Web MVC URL都由Spring Security处理(一些ULR是不安全的),则必须使用它。
您不能将其用于非Spring Web MVC URL,如JSF、Servlet、JAX-WS、JAX-RS等。

** Spring 安全**

WebSecurityConfigurerAdapterSpring Security库的一部分。使用cors()配置CORS会将CORS添加到Spring Security处理的所有URL,请参见15.8。CORS:
Spring Framework为CORS提供了一流的支持。必须在Spring Security之前处理CORS,因为预检请求不包含任何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配置。

相关问题