一、背景
当前很多公司的项目都采用分布式或者微服务架构来设计,这个时候在用户登录系统上就会产生问题,用户登录时的用户信息如何保证共享,如果不共享,那么在分布式架构下用户会反复登录,这样显然是不合理的。此时问题点就来了,如何保证用户登录信息共享呢?
二、shiro用户信息共享的核心思想
shiro框架做用户的登录和授权时,主要是采用session来进行处理,当用户登录时,shiro会将用户信息相关信息存储到session里并设置唯一的sessionId,sessionId作为cookie传给前端,前端登录后下次再访问时,shiro会去解析cookie的值去取session值,然后进行判断用户是否登录合法等操作。此时读者就可以看到,将session进行共享即可。共享的方式很多,可以采用数据库共享,mogodb共享,redis共享。总之采用一种可以存储数据且可以独立部署的工具作为中间转换工具都可,此处是采用redis进行共享的。
三、代码实现
shiro的session的在SessionDao中进行CRUD等一系列操作,此处需要重写其中的方法,将session的存储和获取修改为从redis中取。
package com.dx.shiro.shiro_deom.Test;
import org.apache.shiro.session.Session;
import org.apache.shiro.session.UnknownSessionException;
import org.apache.shiro.session.mgt.eis.AbstractSessionDAO;
import org.springframework.beans.facto