社区微信群开通啦,扫一扫抢先加入社区官方微信群
社区微信群
在shiro中,默认返回的sessionId是uuid或者是random随机的,我们可能需要根据我们的需求进行重写,需要重写sessionId我们只需要写一个类实现SessionIdGenerator中的generateId就行
自定义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;
}
如果觉得我的文章对您有用,请随意打赏。你的支持将鼓励我继续创作!