一个用Spring security做的权限系统,根据JSAPI获取免登授权码,通过ajax来调用后台方法获取当前用户信息,之前一直用的好好的,今天打开一看发现一直获取不了当前登录的用户信息,即后台用SecurityContextHolder.getContext() .getAuthentication().getName();获得的一直是anonymousUser,而不是当前登录的用户名,这就让我很不解,明明代码都没动过,怎么突然不行了,然后我就试着直接在浏览器输入后台接口地址发现就正常!!!
因为Spring Security是通过cookie和session的方式来记录当前用户的,所以就觉得可能是cookie的问题,移动端请求的时候发现我的ajax请求的时候居然没有带cookie,但是我直接在浏览器上请求的时候却有带上cookie。
目前的情况是pc端的都是正常的,而且大部分的移动设备都是正常的,只有少数设备spring security没办法验证登录情况,即使我在拦截器中手动设置了SpringContextHolder,也还是会被拦截掉转到登录去,我现在虽然不能确定,但是从只有部分设备不能免登来看,我的问题定位在客户端。
奇怪的是,有几个设备之前都是可以的,不知道是版本更新还是什么原因,突然就不可以了,还有一个,之前是不可以,过了一段时间,然后就莫名其妙的可以了。
今天发现每这些有问题的设备发出的每一个请求都会创建一个新的会话,导致我之前会话的数据就拿不到了,同理,我的权限验证框架的认证信息也拿不到,但是其他正常的设备走的是同样的代码,从操作开始到结束都始终是同一个会话。
附上抓包信息: 有问题的设备,可以看到cookie中没有SESSION。
没问题的设备,cookie中有SESSION
请教大家,这是什么问题?或者说大家有没有什么好的解决办法。谢谢!
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。