shiro+springboot自定义sessionId

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

shiro+springboot自定义sessionId_第1张图片

 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的实现类,复制实现代码休休改改就行,下面是源码:

shiro+springboot自定义sessionId_第2张图片

上面我们就简单的重写了个实现方法,然后我们要怎么让实现类生效呢?

我们找到RedisSessionDAO这个类,点进去看源码,如下图:

shiro+springboot自定义sessionId_第3张图片

里面没有设置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;
    }

 

你可能感兴趣的:(shiro,自定义sessionId,springboot,shiro)