每次请求接口,jsessionId都要变化的解决方案

因为跨域请求是不会发送cookie等用户认证凭据的到服务端的,每次请求服务端都不能拿到之前的jsessionId,会认为这是一个全新的请求,所以重新生成了一个jsessionid。

首先,客户端要开放传输cookie的认证:

XHR请求

var xhr = new XMLHttpRequest();
xhr.open('GET', 'http://example.com/', true); 
xhr.withCredentials = true; 
xhr.send(null);

ajax请求:

$.ajax({
   url: 'http://example.com/',
   xhrFields: {
      withCredentials: true 
   },
   ...
});

fetch请求:

fetch(url, {
  credentials: 'include'  // 总是发送请求资源域在本地的 cookies、 HTTP Basic authentication 等验证信息.
})

服务端,以java为列:

Access-Control-Allow-Credentials: true  // 允许credentials:

但是
到这一步还没有结束,我们为了解决跨域问题设置的Access-Control-Allow-Origin:* 报错了:
在这里插入图片描述
那只能动态配置当前的访客为白名单:

'Access-Control-Allow-Origin', request.get('origin')

但是
又报了一个错误,预请求options未通过,
在这里插入图片描述
在这里找到了有效方法是:https://www.cnblogs.com/caimuqing/p/6733405.html

 if (request.getMethod().equals("OPTIONS")) {
      HttpUtil.setResponse(response, HttpStatus.OK.value(), null);
      return;
  }

每次请求接口,jsessionId都要变化的解决方案_第1张图片
总算问题得到解决,在这里记录一下踩坑历程,可以愉快地用jsessionId作为用户单一登录凭证啦

你可能感兴趣的:(使用总结)