java开发跨域问题解决方案

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/zanpengfei/article/details/86303018

1、扫描是跨域:

简单来的说是你接口的域名与要请求接口的域名不在同一个域名下或者不是同一个端口时,访问HTTP请求存在跨域的问题。

2、跨域解决方案:跨域资源共享(CORS)机制和JSONP方式

3、具体解决方案:

1)配置跨域资源共享场景:当业务存在跨域需求时,需要设置Access-Control-Origin及Origin白名单,当跨域请求携带Cookie时,才允许设置Access-Control-Allow-Credentials头并且必须设置精细化的白名单,例如*.com必须禁止。需要跨域时,设置Origin白名单,只允许特定域发起跨域请求;若不需要Cookie,则不设置

//预定义Origin白名单
String[] allowOrigin = {“http://www.baidu.com”,”https://toutiao.com”};
Set<String>allowedOrigins=new HashSet<String>(Arrays.asList(allowOrigin));
String originHeader = request.getHeader(“Origin”);
If(allowedOrigins.contains(originHeader)){
response.setHeader(“Access-Control-Allow-Origin”,originHeader);
response.setHeader(“Access-Control-Allow-Methods”,”POST,GET,OPTIONSw”);
response.setHeader(“Access-Control-Max-Age”,”3600”);
response.setHeader(“Access-Control-Allow-Headers”,”content-type,x-requested-with”);
//若CORS跨域请求需要携带Cookie,则设置Access-Control-Allow-Credentials属性为true,反之不设置
// response.setHeader(“Access-Control-Allow-Credentials”,”true”);

}

2)JSONP跨域输出的场景:JSONP是JSON的一种“使用模式”,用于解决主流浏览器的跨域数据访问的问题,JSON的跨域传输数据,必须验证JSON请求来源为本域后自定义白名单域名

Boolean securityCheck = false;
try{
URl rul = new URL (request.getHeader(“Referer”));
String host = referrer.getHost();
If(host!= null && host.endsWith(“.com”)){
securityCheck = true;
}else{
securityCheck = false;
}}catch{
}
If(securityCheck){
//正常处理
}

如果存在跨域问题,设置二者中一种即可

猜你喜欢

转载自blog.csdn.net/zanpengfei/article/details/86303018