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

简介:

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认证组件

v参考拦截

    ESAPI入门使用方法

   Spring MVC 4.2 增加 CORS 支持

  HTTP访问控制(CORS)

  Slf4j MDC 使用和 基于 Logback 的实现分析










本文转自 小眼儿 博客园博客,原文链接:http://www.cnblogs.com/hujunzheng/p/7210157.html,如需转载请自行联系原作者
目录
相关文章
|
11天前
|
存储 缓存 中间件
启用会话控制
【6月更文挑战第15天】启用会话控制。
13 3
|
1月前
|
存储 NoSQL 前端开发
【SpringBoot】Redis集中管理Session和自定义用户参数解决登录状态及校验问题
【SpringBoot】Redis集中管理Session和自定义用户参数解决登录状态及校验问题
|
安全
【Shiro】2、Shiro实现Session会话过期时间控制
一般我们的 session 会话过期时间默认为 30 分钟,有的用户认为 30 分钟太短了,有时候临时有事出去了,回来已经过期了,工作还没完成就只能登出了,非常不方便,于是要求我们改变 session 的过期时间
763 0
|
安全 Java Spring
Spring Security系列教程19--会话管理之处理会话过期
前言 在上一章节中,一一哥 给各位讲解了HTTP协议、会话、URL重新、会话固定攻击等概念,并且实现了对会话固定攻击的防御拦截。 在Spring Security中,其实除了可以对会话固定攻击进行拦截之外,还可以对会话过期进行处理,也就是会话可能会过期,过期了该怎么处理。接下来请各位跟着 壹哥 继续学习,看看会话过期时到底怎么处理的吧。 一. 会话过期 1. 会话过期概念 在处理会话过期之前,我们首先得知道啥是会话过期。 所谓的会话过期,是指当用户登录网站后,较长一段时间没有与服务器进行交互,将会导致服务器上的用户会话数据(即session)被销毁。此时,当用户再次操作网页时,如果服务器进
530 0
|
负载均衡 网络协议 开发者
配置会话保持|学习笔记
快速学习配置会话保持
336 0
配置会话保持|学习笔记
|
安全 Java 数据安全/隐私保护
springsecurity默认用户生成
springsecurity默认用户生成
301 0
Confluence 6 推荐的更新通知设置和禁用
你可以设置默认的发送选项(发送 / 不发送)和默认的发送时间(每天或每周)。 如何配置推荐更新电子邮件通知: 在屏幕的右上角单击 控制台按钮 ,然后选择 General Configuration 链接。
1351 0
|
SQL 关系型数据库 Java
Confluence 6 从你的 JDBC 连接中直接启用校验查询
确定 Confluence 在数据库连接池中校验数据库连接: 停止 Confluence。 编辑 confluence.cfg.xml 文件。
999 0