v准备内容


v简单的shiro无状态认证
无状态认证拦截器
View Code
Subject工厂
View Code
注意,这里禁用了session
无状态Realm
View Code
无状态Token
View Code
shiro配置文件
View Code
这里禁用了回话调度器的session存储
web.xml配置
View Code
token生成工具类
View Code
简单测试一下
View Code
补充Spring中多重属性赋值处理

以上参考 开涛老师的博文!
v相对复杂一点的shiro无状态认证
*加入session,放入redis中(user_name作为key值,token作为hash值,当前登录时间作为value值)
*用户登录互斥操作:如果互斥,清除redis中该用户对应的状态,重新写入新的状态;如果不互斥,写入新的状态,刷新key值,并检测该用户其他的状态是否已经超时(根据key值获取到所有的 key和hashKey的组合,判断value[登入时间]+timeout[超时时间] >= curtime[当前时间]),如果超时则清除状态。
*使用esapi进行token的生成
*认证信息,如果是web端则从cookie中获取,ajax从header中获取;如果是移动端也是从header中获取
session manager逻辑
View Code
无状态认证过滤器
View Code
dubbo服务调用时上下文的传递问题
思路:认证过滤器中 通过MDC将上下文信息写入到InheritableThreadLocal中,写一个dubbo的过滤器。在过滤器中判断,如果是消费一方,则将MDC中的上下文取出来放入dubbo的context变量中;如果是服务方,则从dubbo的context中拿出上下文,解析并放入MDC以及InvocationInfoProxy(下面会提到)类中
Subject工厂
View Code
同样禁用掉session的创建
无状态Realm
View Code
这里使用自定义 session manager去校验
无状态token
View Code
token处理器
View Code
将一些必须字段和扩展字段进行通过esapi 的hash算法进行加密,生成token串,最终的token = token处理器标识+过期时间+原token
shiro配置文件
View Code
通过InvocationInfoProxy这个类(基于ThreadLocal的),可以拿到用户相关的参数信息
View Code
还有esapi和cache的相关代码到项目里看一下吧
v项目地址
欢迎访问,无状态shiro认证组件!