SpringMVC配置CORS

1 CorsFilter#

通过配置CorsFilter,可以在过滤器级别对跨域请求进行处理。

@Configuration  
public class CorsFilterConfig {  
    @Bean  
    public CorsFilter corsFilter() {  
        // 1、创建CorsConfigurationSource配置源,使用spring-web内置实现  
        UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource();  
        // 2、创建CorsConfiguration配置,并注册到配置源(可创建并注册多个配置)  
        CorsConfiguration config = new CorsConfiguration();  
        config.setAllowCredentials(true);  
        config.setAllowedOriginPatterns(Collections.singletonList("*"));  
        config.addAllowedHeader("*");  
        config.addAllowedMethod("*");  
        source.registerCorsConfiguration("/**", config);  
        // 3、创建CorsFilter过滤器,设置配置源  
        return new CorsFilter(source);  
    }  
}

2 WebMvcConfigurer#

使用WebMvcConfigurer中的addCorsMappings()方法,在启动项目时该配置会被自动添加到org.springframework.web.servlet.handler.AbstractHandlerMapping#corsConfigurationSource

@Configuration  
@EnableWebMvc  
public class WebMvcConfig implements WebMvcConfigurer {  
    @Override  
    public void addCorsMappings(CorsRegistry registry) {  
        registry.addMapping("/api1/**")  
                .allowedOrigins("https://domain1.com")  
                .allowedMethods("PUT", "DELETE")  
                .allowedHeaders("header1", "header2", "header3")  
                .exposedHeaders("header1", "header2").  
                allowCredentials(true).maxAge(3600);  
        registry.addMapping("/api2/**")  
                .allowedOrigins("https://domain2.com")  
                .allowedMethods("PUT", "DELETE")  
                .allowedHeaders("header1", "header2", "header3")  
                .exposedHeaders("header1", "header2").  
                allowCredentials(true).maxAge(3600);  
    }  
}

3 @CrossOrigin#

@CrossOrigin可以加到Controller类上,为内部所有接口添加统一的配置:

@CrossOrigin  
@RestController  
public class CorsController {
}

@CrossOrigin也可以加到Controller类内部具体某个方法上,指定为这个接口添加配置:

@RestController  
public class CorsController {  
    @CrossOrigin  
    @RequestMapping("CrossOrigin")  
    public String CrossOrigin() {
        return "Hello Cors!";  
    }  
}

@CrossOrigin配置会在项目启动时,被添加到org.springframework.web.servlet.handler.AbstractHandlerMethodMapping.MappingRegistry#corsLookup

posted @   Xianuii  阅读(628)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
主题色彩
点击右上角即可分享
微信分享提示