dolyw/ShiroJwt

当前项目缓存是如何存放进去的呢?

konghehan opened this issue · 7 comments

定义了CustomCache类,但是当前缓存是在哪put了呢?

因为我只看到了对AuthenticationInfo的缓存,没找到AuthorizationInfo的缓存

dolyw commented

没理解你的意思,你的问题是什么

dolyw commented

CustomCache是重写资源的缓存采用Redis存储,防止每次都从数据库查询

还有一个疑问就是Principals,这个Principals和session一样都是在创建subject的时候就拿到了,这个Principals是存储在自定义的缓存中的么?

dolyw commented

Principals官方给出的概念就是一个主体,一般使用都是用来存放用户信息,Jwt是每次请求都是需要认证的,Principals的使用是放内存中了,每次认证都会走doGetAuthenticationInfo方法返回一个新的SimpleAuthenticationInfo对象,第一个参数就是Principals,这里我是直接放的Token,因为Token里有用户的信息,然后这次请求中就可以直接用UserUtil工具类从内存获取当前请求的用户信息

多谢您耐心解答,那么我的理解是第一次登陆认证会返回SimpleAuthenticationInfo对象(有Principals信息),这个对象会存在内存中,下一次带着token进来也还会再认证获取到这个对象,如果内存没有则创建。所以即使在集群环境中,不会因为在节点1内存中有Principals,而节点2内存中获取不到Principals?不知道我的理解有没有哪有问题。

dolyw commented

是每次认证通过了都会New这个对象,相当于每次请求认证通过都是新New一个,要是集群看你当前请求负载均衡分配走的那个机器,就在那个机器内存中创建,相当于SimpleAuthenticationInfo对象只在当前这次请求有用,下次请求认证通过又会重新New