2018-08-19 关于shiro集成redis缓存存储认证信息、存储授权信息以及sessionId的存储实现共享问题

问题1.多用户登录时redis中sessionId只有一个的问题

 

shiro中的session是通过shiro的subject对象的getsessio()进行获取的,postman测试时,第二个登录请求会使用现有的第一个用户的cookie,所以请求在后台服务器被识别为第一个用户重新登录,导致使用了同一个session,而没有创建新的session。

问题2:多用户登录测试时只有一个授权信息

浏览器的授权信息是在登录认证时通过登录认证的:

SimpleAuthenticationInfo info =
        new SimpleAuthenticationInfo(username,password,username+"."+getName());

建立,第三个参数表示你所新建立的用户的授权信息缓存的当前对象,直接使用getName()会导致每次创建的授权信息都是同一个,具体源码还未查询,但通过登录测试来看,应该是有就直接获取同一个,没有就新建,所以每个用户的授权信息要区分开,头一次使用shiro,因为用户名辨识度高且唯一,我使用用户名拼接以此区分每个用户的授权信息。

Shiro-Redis 是一个用于在 Shiro实现 Session 共享的插件,它使用 Redis 作为数据存储缓存,以实现分布式环境下的 Session 共享。 要实现 Shiro-RedisSession 共享,你需要进行以下步骤: 1. 引入 Shiro-Redis 插件依赖:在项目的 Maven 或 Gradle 配置文件中添加 Shiro-Redis 依赖。 2. 配置 Redis 连接信息:在项目的配置文件中配置 Redis 的连接信息,包括主机名、端口号、密码等。 3. 配置 RedisSessionDAO:在 Shiro 的配置文件中配置 RedisSessionDAO,指定使用 Redis 作为 Session 存储缓存实现。可以设置过期时间、前缀等参数。 4. 配置 Session Manager:在 Shiro 的配置文件中配置 Session Manager,指定使用自定义的 RedisSessionManager 作为 Session 的管理器。同时,需要将之前配置的 RedisSessionDAO 设置给 RedisSessionManager。 5. 配置 SecurityManager:在 Shiro 的配置文件中配置 SecurityManager,指定使用自定义的 RedisSessionManager 作为 Session 管理器。同时,需要将之前配置的 RedisSessionDAO 设置给 RedisSessionManager。 6. 配置 Filter Chain:在 Shiro 的配置文件中配置 Filter Chain,将自定义的 RedisSessionManager 添加到 Filter Chain 中,以便对请求进行 Session 管理。 通过以上步骤配置完成后,Shiro 将会使用 Redis 进行 Session存储缓存,从而实现 Session共享。在分布式环境中,不同应用节点之间可以通过 Redis 共享 Session 数据,从而实现用户的登录状态和会话信息共享
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值