shiro+springboot自定义sessionId
·
在shiro中,默认返回的sessionId是uuid或者是random随机的,我们可能需要根据我们的需求进行重写,需要重写sessionId我们只需要写一个类实现SessionIdGenerator中的generateId就行

1.自定义sessionId生成
自定义CustomSessionIdGenerator实现SessionIdGenerator接口,重写generateId()方法:
package net.xdclass.rbac_shiro.config;
import org.apache.shiro.session.Session;
import org.apache.shiro.session.mgt.eis.SessionIdGenerator;
import java.io.Serializable;
import java.util.UUID;
/**
* @author sqz
* @Description: 自定义sessionId生成
* @date 2019/7/3 8:50
*/
public class CustomSessionIdGenerator implements SessionIdGenerator {
@Override
public Serializable generateId(Session session) {
return "xdclass"+ UUID.randomUUID().toString().replace("-","");
}
}
不知道怎么写的直接看源码就行,找CustomSessionIdGenerator的实现类,复制实现代码休休改改就行,下面是源码:

上面我们就简单的重写了个实现方法,然后我们要怎么让实现类生效呢?
我们找到RedisSessionDAO这个类,点进去看源码,如下图:

里面没有设置sessionId的方法,在找其父类,发现里面有 设置我们实现好的CustomSessionIdGenerator的方法,如下图所示:

因为RedisSessionDAO继承了AbstractSessionDAO,所以也拥有了父类的方法,我们只需要将自定义好的CustomSessionIdGenerator设置到redisSessionDAO中就可以了,代码如下:
/**
* 自定义session持久化
* @return
*/
@Bean
public RedisSessionDAO redisSessionDAO(){
RedisSessionDAO redisSessionDAO = new RedisSessionDAO();
redisSessionDAO.setRedisManager(getRedisManager());
//直接看源码
redisSessionDAO.setSessionIdGenerator(new CustomSessionIdGenerator());
return redisSessionDAO;
}
魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。
更多推荐


所有评论(0)