Java后台根据session保持登录状态控制请求,浏览器Web页面访问正常,微信小程序请求总是被拦截

问题描述:

Java后台根据session保持登录状态拦截未登录的请求。登录成功后将用户信息添加进session,保持登录状态,能够进行各种操作。

逻辑貌似没什么问题,浏览器Web页面在登录后发送各种请求都能有效相应;但是在微信小程序上,登录之后的各种请求还是会被Java后台拦截,咋回事?

问题分析:

仔细检查浏览器请求,发现请求中携带了Cookie里保存的JSESSIONID。

Java后台根据session保持登录状态控制请求,浏览器Web页面访问正常,微信小程序请求总是被拦截_第1张图片

这里的JSESSIONID,就是浏览器保存的SessionId,这与Java后台的SessionId是一致的,以辨识当前请求用户是谁?已登录?

或许,微信小程序和Java后台交互的时候,没携带这个SessionId,导致Java后台认为当前请求是未登录的恶意访问而拦截掉了?

问题解决:

1、Java后台在微信小程序端登录后,向微信小程序端返回当前的SessionId,核心代码如下:

//返回SessionId,用于实现在线状态
map.put("SessionId", session.getId());
return map;

2、微信小程序端登录后接收保存该SessionId,核心代码如下:

//将SessionId写入微信缓存,实现以后请求时携带SessionId保持登录状态
wx.setStorageSync("SessionId", data.SessionId);

3、微信小程序端每次请求,都在请求头中携带该SessionId,核心代码如下:

wx.request({
    //其它内容省略
    header: {
      'Cookie': 'JSESSIONID=' + wx.getStorageSync('SessionId'),
      "Content-Type": "application/json"
    },
  })

4、安全起见,微信小程序端退出登录后,清空缓存中保存的SessionId,核心代码如下:

wx.removeStorageSync("SessionId");

 

至此,问题解决!

你可能感兴趣的:(微信小程序,JavaEE)