SpringBoot配置跨域的机种方式 spring跨域的几种方式
- 1、注解方式
- 2、实现 WebMvcConfigurer 接口
- 3、使用 FilterRegistrationBean 过滤器 (推荐)
1、注解方式
使用 @CrossOrigin
注解标注在 Controller或者 Mapping
@RestController
@CrossOrigin
@RequestMapping("/ctro")
public class Controller{@CrossOrigin@GetMapping(value = "/test")public String test(){return "Nihao";}
}
2、实现 WebMvcConfigurer 接口
这种方式问题比较多,如果没有生效,需要考虑 是不是有其他组件模块影响了跨域,例如(Shiro、Sa-Token等过滤器会影响)
@Configuration
@EnableWebMvc
public class CorsConfig implements WebMvcConfigurer {@Overridepublic void addCorsMappings(CorsRegistry registry) {registry.addMapping("/**").allowedOrigins("*") // 允许所有域名访问,可以根据需求进行配置.allowedMethods("GET", "POST", "PUT", "DELETE", "OPTIONS") // 允许的请求方法.allowedHeaders("*") // 允许的请求头.allowCredentials(true) // 是否允许发送Cookie.maxAge(3600); // 预检请求的有效期,单位秒}
}
3、使用 FilterRegistrationBean 过滤器 (推荐)
@Configuration
public class CorsConfig {@Beanpublic FilterRegistrationBean corsFilter() {UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource();CorsConfiguration config = new CorsConfiguration();config.setAllowCredentials(true);// 允许所有域名访问,可以根据需求进行配置, 使用setAllowedOrigin会出现IllegalArgumentExceptionconfig.addAllowedOriginPattern("*");config.addAllowedHeader("*");config.addAllowedMethod("*");source.registerCorsConfiguration("/**", config);// 使用FilterRegistrationBean包装CorsFilterFilterRegistrationBean bean = new FilterRegistrationBean(new CorsFilter(source));// 设置Filter的优先级,值越小优先级越高bean.setOrder(0);return bean;}}