关于带Cookie的跨域问题导致Shiro授权和认证失败的问题

问题描述:后端框架为SpringBoot,安全框架为Shiro。其中认证和授权都已经做好了,授权和认证主要是用注解的方式,主要采用了@RequiresAuthentication这个注解,意思是加上这个注解的方法,必须经过授权才可以访问,也就是必须登陆才可以。之后整个项目只用了Postman进行测试。

主要测试就是两方面,在不登陆的情况下去访问带有@RequiresAuthentication的方法,会返回没有权限。在登陆之后,就可以访问得到相应的资源。在postman测试完了之后,就以为Shiro配置完毕了。

后来,项目在线上进行测试的时候就发现问题了,也就是登陆之后(登录是成功的),在访问带有@RequiresAuthentication仍然报没有权限。。后来也进行了一些断点测试,就发现了SecurityUtils.getSubject().getPrincipal()在登陆之后是存在的,但是如果是另外一个请求这个值就是空的。。。

本来我在自己的印象里,shiro的操作是线程相关的,也就是可以通过线程来区分是哪个用户在操作。但是线程是多大的呢。。是每一个Http请求都新建一个线程吗?显然我觉得这是不可能的,但是我又找不到证据,所以就开始找资料,后来找到了这篇。https://blog.youkuaiyun.com/quanaianzj/article/details/83858575,这一片很详细的解释了Shiro的工作原理。直接看最终的结论:

也就是说,每次的subject内的用户信息,是从session中读取的,所以既然跟session有关系。前端发送的请求就必须带上jsessionid,这个是session的唯一凭证,一般这些事情都是浏览器帮你做好的。但是自己翻了翻浏览器的cooki

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值