关于shiro的猜测

记录一下自己的猜测,等到有能力阅读源码的时候,再验证一下猜测是否成立


最近研究了一下shiro整合JWT,上网查了一些资料,写了一个简单的实验项目。

我使用的测试工具是postman,之前在没有整合JWT之前,我发现如果不登录的情况下直接访问授权资源是不被允许的,后来我尝试着在登录之后,改掉postman请求中header中的sessionid,发现访问失败了。

由此猜测shiro在登录后,会为用户创建session,访问授权资源时如果没有提供正确的sessionid则视为未登录(仅仅是猜测,水平有限没看过源码)

否则的话,修改了sessionid为什么会影响访问呢?

之后我使用整合了JWT的项目尝试了一下同样的操作,发现怎么修改sessionid都丝毫不会影响访问。

整合的方式参考了网上的一篇文章,自定义了过滤器,并应用于所有路径。

当http请求提供了token时,会进行认证、授权,如果没有提供token,则也会允许通过,但不会为该用户进行认证,这个判断是为了当用户访问获取token的接口时不会被拦截而设计。

第一次获取token会验证用户的用户名和密码,验证无误则提供给用户一个token。

以后每次访问都携带token,每一次都进行认证授权的操作。

那么再延伸思考一下:

如果我的第一个猜想成立的话,那么当访问分布式项目的时候,如果没有通过一些方案共享session的情况下,则可能导致用户第一次登陆创建session,第二次访问的服务端没有他的session而被认定为未登录。

但是,如果整合了JWT就避免了这个问题,每次携带令牌访问,每次都重新认证然后授权。

原文地址:https://www.cnblogs.com/wxdmw/p/13932794.html