v准备内容

无状态shiro认证组件(禁用默认session)

无状态shiro认证组件(禁用默认session)

v简单的shiro无状态认证

  无状态认证拦截器

无状态shiro认证组件(禁用默认session) View Code

  Subject工厂

无状态shiro认证组件(禁用默认session) View Code

  注意,这里禁用了session

  无状态Realm

无状态shiro认证组件(禁用默认session) View Code

  无状态Token

无状态shiro认证组件(禁用默认session) View Code

  shiro配置文件

无状态shiro认证组件(禁用默认session) View Code

  这里禁用了回话调度器的session存储

  web.xml配置

无状态shiro认证组件(禁用默认session) View Code

  token生成工具类

无状态shiro认证组件(禁用默认session) View Code

  简单测试一下

无状态shiro认证组件(禁用默认session) View Code

  补充Spring中多重属性赋值处理

无状态shiro认证组件(禁用默认session)

  以上参考 !

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逻辑

无状态shiro认证组件(禁用默认session) View Code

  无状态认证过滤器

无状态shiro认证组件(禁用默认session) View Code

  dubbo服务调用时上下文的传递问题

  思路:认证过滤器中 通过MDC将上下文信息写入到InheritableThreadLocal中,写一个dubbo的过滤器。在过滤器中判断,如果是消费一方,则将MDC中的上下文取出来放入dubbo的context变量中;如果是服务方,则从dubbo的context中拿出上下文,解析并放入MDC以及InvocationInfoProxy(下面会提到)类中

  Subject工厂

无状态shiro认证组件(禁用默认session) View Code

  同样禁用掉session的创建

  无状态Realm

无状态shiro认证组件(禁用默认session) View Code

  这里使用自定义 session manager去校验

  无状态token

无状态shiro认证组件(禁用默认session) View Code

  token处理器

无状态shiro认证组件(禁用默认session) View Code

  将一些必须字段和扩展字段进行通过esapi 的hash算法进行加密,生成token串,最终的token = token处理器标识+过期时间+原token

  shiro配置文件

无状态shiro认证组件(禁用默认session) View Code

  通过InvocationInfoProxy这个类(基于ThreadLocal的),可以拿到用户相关的参数信息

无状态shiro认证组件(禁用默认session) View Code

  还有esapi和cache的相关代码到项目里看一下吧

v项目地址

  欢迎访问,!

v参考拦截

    

   

  

  










本文转自 小眼儿 博客园博客,原文链接:http://www.cnblogs.com/hujunzheng/p/7210157.html,如需转载请自行联系原作者

相关文章: