java 跨域session_解决跨域session 同步问题

跨域来源:(前端站点和后端API布署到不同的站点)

f8cb500ab1cc8ca280aabcf86d5c206f.png

解决方案

一.服务端设置

1.配置允许跨域请求

public classBaseAction {/*** 支持跨域请求

*@authorfxd

*@paramresponse

*@sinceJDK 1.6*/

protected voidcrossComain(HttpServletRequest request,HttpServletResponse response){

String[] allowDomains= {"http://www域名1","http://www域名2"};

Set allowOrigins= newHashSet(Arrays.asList(allowDomains));

String originHeads= request.getHeader("Origin");if(allowOrigins.contains(originHeads)){//配置跨域访问的最简单的方式是用通配符 * ,(就是不安全,所有的请求都能跨域)

response.setHeader("Access-Control-Allow-Origin", originHeads);

response.setHeader("Access-Control-Allow-Methods", "POST,GET,OPTIONS,DELETE,HEAD,PUT,PATCH");

response.setHeader("Access-Control-Max-Age", "36000");

response.setHeader("Access-Control-Allow-Headers", "Origin, X-Requested-With, Content-Type, Accept,Authorization,authorization");

response.setHeader("Access-Control-Allow-Credentials","true");//保持跨域 Ajax 时的 Cookie

}

}

}

2.接口调用跨域方法

/*** 测试*/@Controllerpublic class Test extendsBaseAction{

@RequestMapping("Test")public voidtest(HttpServletRequest request,HttpServletResponse response){//调用允许跨域方法,此接口支持跨域请求

crossComain(request, response);

System.out.println("支持跨域请求");

}

}

以上两步就完成接口跨域请求了

二. 客户端配置

1.因为在默认情况下,跨源请求不提供凭据(cookie、HTTP认证及客户端SSL证明等)。通过将withCredentials属性设置为true,可以指定某个请求应该发送凭据。如果服务器接收带凭据的请求,会用下面的HTTP头部来响应。

57cef2d1e4b5fda053684e19e4ec532b.png

/**

* ajax post 跨域 request

* @param {Object} url 请求地址

* @param {Object} data 请求参数

* @param {Object} success 成功回调

* @param {Object} async 是否同步 false:同步 ture:异步

*/

function ajax_cross(url,data,success,async){

$.ajax({

type:"post",

url:url,

async:async,

data:data,

dataType:"json",

xhrFields:{

withCredentials:true

},

crossDomain:true,

success:success

});

}

2.调用分装好的ajax方法:如图

$(function(){

Test();

});

//测试

function Test(){

//跨域请求

ajax_cross("/Test",{},function success(result){

console.log(result);

},false);

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
跨域session同步是指在不同域名或子域名之间共享用户会话信息的过程。由于浏览器的同源策略限制,不同域或子域之间的网页无法直接访问对方的Cookie或会话信息。 有几种常见的方法可以实现跨域session同步: 1. 代理方式:将所有请求发送到同一个域或子域下的代理服务器,由代理服务器处理跨域请求,并在请求中携带会话信息。代理服务器将请求转发给目标服务器,并将响应返回给客户端。这种方法需要在代理服务器上进行额外的配置和开发。 2. 跨域资源共享(CORS):如果目标服务器支持CORS,可以通过在响应头中添加许可的源(Origin)来允许跨域请求。客户端发送请求时,需要在请求头中添加Origin字段,服务器接收到请求后检查Origin字段,并在响应头中添加Access-Control-Allow-Origin字段来指定允许的源。这种方法需要服务器的支持,并且要注意安全性。 3. JSONP:JSONP是通过动态创建<script>标签来实现跨域通信的一种技术。客户端通过在URL中添加一个回调函数名,服务器返回一个包含回调函数调用的JavaScript脚本。客户端接收到脚本后即可执行回调函数,从而获取到会话信息。这种方法需要服务器端支持返回JSONP格式的数据。 4. 基于Token的身份验证:使用基于Token的身份验证机制可以在不同域或子域之间传递用户认证信息。当用户完成登录后,服务器会生成一个Token,并将其返回给客户端。客户端在后续的请求中将Token添加到请求头中,服务器根据Token验证用户身份并返回相应的会话信息。这种方法需要在客户端和服务器端进行相应的配置和开发。 需要注意的是,跨域session同步涉及到安全性和隐私保护,需要谨慎设计和实施。具体使用哪种方法要根据实际需求和技术环境来决定。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值