Java跨域配置
阿新 • • 發佈:2022-01-03
Java跨域配置
XML 配置全域性
如果整個專案所有方法都可以訪問,則可以這樣配置
<mvc:cors>
<mvc:mapping path="/**" />
</mvc:cors>
/**
其中* 表示匹配到下一層
** 表示後面不管有多少層,都能匹配。
請求路徑有/cross/,方法示例如下:
<mvc:cors>
<mvc:mapping path="/cross/*"/>
</mvc:cors>
上面表示有/cross/路徑的請求都支援跨域訪問,也可以增加其它的,如下:
<mvc:cors> <mvc:mapping path="/cross/**" allowed-origins="" max-age="2500"/> <mvc:mapping path="/domain/**"/> </mvc:cors>
詳細配置:
<mvc:cors> <mvc:mapping path="/**" allowed-origins="http://127.0.0.1:5500" allowed-methods="POST,GET,OPTIONS,DELETE,PUT,PATCH" allowed-headers="Content-Type,Access-Control-Allow-Headers,Authorization,X-Requested-With" allow-credentials="true"/> </mvc:cors>
<!--配置跨域--> <mvc:cors> <!--path:允許跨域請求的對映地址:/api/**--> <!--allowed-origins:指定允許跨域請求的路徑,*表示任意所有,也顯式指定值,值可以有多個,如:http://192.168.2.75,https://www.test.com--> <!--allowed-methods:指定允許跨域的請求方式,值可以有多個,用逗號隔開,如:get,post,put,delete,options--> <!--allowed-headers:指定允許跨域的請求頭,值可以有多個,用逗號隔開--> <!--allow-credentials:是否允許客戶端請求時攜帶資源,如cookie,值預設false,表示不允許--> <!--值為*都是表示任意,不限制--> <mvc:mapping path="/**" allowed-origins="*" allowed-methods="*" allowed-headers="*" allow-credentials="true"/> <!--實際開發中不建議使用*程式碼所有,不安全--> <!--<mvc:mapping path="/**" allowed-origins="http://192.168.2.75,http://www.test.com" allowed-methods="GET,POST"/>--> </mvc:cors>
實際開發中:
allowed-origins:一般都會明確指定客戶端的url
allowed-methods:值一般都為"get,post,put,delete,options"
通過註解的方式允許跨域
在Controller類或其方法上加@CrossOrigin註解,來使之支援跨域
@CrossOrigin(origins = "*")
其中origins為CrossOrigin的預設引數,即跨域來源,* 即任何來源,也可以是其他域名。即可以以以下形式:
@CrossOrigin(origins="http://127.0.0.1:5500/")
SpringBoot的配置方式
@Configuration
public class MvcConfiguration {
@Bean
public WebMvcConfigurer corsConfigurer() {
return new WebMvcConfigurer() {
@Override
public void addCorsMappings(CorsRegistry registry) {
registry.addMapping("/**")//指定跨域對映地址
.allowedOrigins("http://127.0.0.1:5500/")//實際開發中需要指定客戶端具體url
.allowedMethods("GET","POST","PUT", "DELETE","OPTIONS")
.allowedHeaders("*")//設定允許的請求頭
//設定需要暴露給客戶端獲取的響應頭內容
// .exposedHeaders("access-control-allow-headers",
// "access-control-allow-methods",
// "access-control-allow-origin",
// "access-control-max-age",
// "X-Frame-Options")
.allowCredentials(true)//設定是否允許客戶端跨域攜帶驗證資料,如Cookie值
.maxAge(3600);//跨域請求超時
}
};
}
}
可能出現的問題:500錯誤
錯誤配置:
<mvc:cors>
<mvc:mapping path="/**"
allowed-origins="*" // 此處變化
allowed-methods="POST,GET,OPTIONS,DELETE,PUT,PATCH"
allowed-headers="Content-Type,Access-Control-Allow-Headers,Authorization,X-Requested-With"
allow-credentials="true"/>
</mvc:cors>
修改為:
<mvc:cors>
<mvc:mapping path="/**"
allowed-origins="http://127.0.0.1:5500"
allowed-methods="POST,GET,OPTIONS,DELETE,PUT,PATCH"
allowed-headers="Content-Type,Access-Control-Allow-Headers,Authorization,X-Requested-With"
allow-credentials="true"/>
</mvc:cors>