SpringBoot 跨域配置
方式一:使用过滤器
import org.springframework.context.annotation.Bean;import org.springframework.context.annotation.Configuration;import org.springframework.web.cors.CorsConfiguration;import org.springframework.web.cors.UrlBasedCorsConfigurationSource;import org.springframework.web.filter.CorsFilter;@ConfigurationpublicclassWebConfig{@Beanpublic CorsFiltercorsFilter(){
UrlBasedCorsConfigurationSource source=newUrlBasedCorsConfigurationSource();
CorsConfiguration config=newCorsConfiguration();
config.addAllowedHeader("*");
config.addAllowedMethod("*");
config.addAllowedOrigin("*");
source.registerCorsConfiguration("/**", config);returnnewCorsFilter(source);}}
方式二:实现 WebMvcConfigurer,重写 addCorsMappings 方法
import org.springframework.context.annotation.Configuration;import org.springframework.web.servlet.config.annotation.CorsRegistration;import org.springframework.web.servlet.config.annotation.CorsRegistry;import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;@ConfigurationpublicclassWebConfigimplementsWebMvcConfigurer{@OverridepublicvoidaddCorsMappings(CorsRegistry registry){
CorsRegistration cors= registry.addMapping("/**");
cors.allowedOrigins("*");// 支持跨域用户凭证//cors.allowCredentials(true);//cors.allowedOriginPatterns("*");// 设置 header 能携带的信息
cors.allowedHeaders("*");// 支持跨域的请求方法
cors.allowedMethods("GET","POST","PUT","DELETE","OPTIONS");// 设置跨域过期时间,单位为秒
cors.maxAge(3600);}// 简写形式@OverridepublicvoidaddCorsMappings(CorsRegistry registry){
registry.addMapping("/**").allowedOrigins("*")//.allowedOriginPatterns("*").allowedHeaders("*").allowedMethods("GET","POST","PUT","DELETE","OPTIONS").maxAge(3600);}}
方式三:使用 @CrossOrigin 注解
@RestController@RequestMapping("/client")publicclassHelloController{@CrossOrigin@GetMapping("/hello")public Resulthello(){return Result.success();}@RequestMapping(value="/test", method= RequestMethod.GET)public Resulttest(){return Result.fail();}}
@Target({ElementType.TYPE, ElementType.METHOD})@Retention(RetentionPolicy.RUNTIME)@Documentedpublic @interfaceCrossOrigin{@Deprecated
String[] DEFAULT_ORIGINS=newString[]{"*"};@Deprecated
String[] DEFAULT_ALLOWED_HEADERS=newString[]{"*"};@Deprecatedboolean DEFAULT_ALLOW_CREDENTIALS=false;@Deprecatedlong DEFAULT_MAX_AGE=1800L;@AliasFor("origins")
String[]value()default{};@AliasFor("value")
String[]origins()default{};
String[]originPatterns()default{};
String[]allowedHeaders()default{};
String[]exposedHeaders()default{};
RequestMethod[]methods()default{};
StringallowCredentials()default"";longmaxAge()default-1L;}
vuecli+axios 测试案例
<template><divclass="main"><divclass="button-group"><buttonclass="button"@click="handleGet('/client/hello')">hello</button>|<buttonclass="button"@click="handleGet('/client/test')">test</button>|</div></div></template><script>import axiosfrom'../../node_modules/axios'let http= axios.create({
baseURL:'http://localhost:9090',
timeout:1000*5})exportdefault{
methods:{handleGet(url){http({
url}).then(res=>{
console.log(res.data)})}}}</script>