Shiro获取不到用户问题/不同请求不同session

这个问题困扰了我好久,看源码从线程分析到Session,最后确定是 session 的问题,我发现每次在 swagger 请求后,后台的 Shiro 都是重新创建一个 session,且没有把用户信息更新到新的 session 中。
也就是说,swagger 的每次请求是没有携带 JSESSIONID 的,而无意间听到前辈说,后端 swagger 一般是不会出现跨域问题,而我却为 swagger 配置了一个跨域拦截器,而 swagger 在发送跨域请求时是不会携带 cookie 信息的,所以每次请求都是新的 session,而这个还不是最终的答案。

根本原因:

  • 本地的网络 ipv6 的优先级高于 ipv4,通过ping localhost 可以发现 localhost 的地址是 ::1 ,而不是 127.0.0.1
  • localhost 和 127.0.0.1 是两个域, 虽然都指向本机,但也属于跨域,后台的 session 在 localhost 中,而 swagger 使用的是 127.0.0.1

解决方法:

  1. 管理员 CMD:
    查看优先级:netsh interface ipv6 show prefixpolicies->IPv6地址(:: / 0)优先于IPv4地址(:: / 96,:: ffff:0:0/96)
    调整优先级:
    netsh int ipv6 set prefix ::/96 50 0
    netsh int ipv6 set prefix ::ffff:0:0/96 40 1
    netsh int ipv6 set prefix 2002::/16 35 2
    netsh int ipv6 set prefix 2001::/32 30 3
    netsh int ipv6 set prefix ::1/128 10 4
    netsh int ipv6 set prefix ::/0 5 5
    netsh int ipv6 set prefix fc00::/7 3 13
    netsh int ipv6 set prefix fec0::/10 1 11
    netsh int ipv6 set prefix 3ffe::/16 1 12
    查看优先级:netsh interface ipv6 show prefixpolicies -> :: / 96,:: ffff:0:0/96优先级高于::/0了

  2. 修改 swagger 的url:http://localhost:8080/infinitus-video-wxapp/v2/api-docs.do, 使用 localhost 访问 ui:http://localhost:8080/infinitus-video-wxapp/swagger/index-local.html

  • 4
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值