SpringBoot整合Redis的方法

架构

SpringBoot整合Redis的方法

方案

使用 redis 集中存储,实现分布式集群共享用户信息,这里我们采用第三方开源插件crazycake来实现,pom.xml 引入:

    org.springframework.boot    spring-boot-starter-data-redis    org.crazycake    shiro-redis    3.2.3

登录后复制

配置 application.properties:

# Redis# 数据库索引(默认为0)redis.database=0# 服务器地址 变更为自己的redis.host=127.0.0.1# 服务器连接端口redis.port=6379# 服务器连接密码,如果不设置密码注释掉即可# redis.password=# 连接超时时间(毫秒)redis.timeout=30000

登录后复制

本来crazycake插件已经实现了RedisManager,但是参数不可配,这里我们需要自己重写一下:

public class RedisManager extends WorkAloneRedisManager implements IRedisManager {    private RedisProperties redis;    private JedisPool jedisPool;    public RedisManager(RedisProperties redis) {        this.redis = redis;    }    private void init() {        synchronized(this) {            if (this.jedisPool == null) {                this.jedisPool = new JedisPool(this.getJedisPoolConfig(), redis.getHost(), redis.getPort(),                        redis.getTimeout(), redis.getPassword(), redis.getDatabase());            }        }    }    @Override    protected Jedis getJedis() {        if (this.jedisPool == null) {            this.init();        }        return this.jedisPool.getResource();    }}

登录后复制

参数配置 RedisProperties:

@Data@ConfigurationProperties(prefix = "redis")public class RedisProperties {    private String host;    private int port;    private int timeout;    private String password;    private int database;}

登录后复制

配置 ShiroConfig:

/** * Shiro权限配置 * 一定要配置 @Configuration 和 @EnableConfigurationProperties 注解 */@Configuration@EnableConfigurationProperties({RedisProperties.class})public class ShiroConfig {    private RedisProperties redis;    public ShiroConfig(RedisProperties redis) {        this.redis = redis;    }    @Bean    public UserRealm userRealm() {        return new UserRealm();    }    @Bean    public ShiroFilterFactoryBean shiroFilterFactoryBean (SecurityManager securityManager) {        ShiroFilterFactoryBean shiroFilterFactoryBean = new ShiroFilterFactoryBean();        shiroFilterFactoryBean.setSecurityManager(securityManager);        shiroFilterFactoryBean.setLoginUrl("/index.html");        shiroFilterFactoryBean.setUnauthorizedUrl("/403");        // 拦截器        Map filterChainDefinitionMap = new LinkedHashMap();        /**         * 静态文件         */        filterChainDefinitionMap.put("/file/**","anon");        /**         * 登录注册         */        filterChainDefinitionMap.put("/register.shtml","anon");        filterChainDefinitionMap.put("/login.shtml","anon");        /**         * 管理后台         */        filterChainDefinitionMap.put("/sys/**", "roles[admin]");        filterChainDefinitionMap.put("/**", "authc");        shiroFilterFactoryBean.setFilterChainDefinitionMap(filterChainDefinitionMap);        return shiroFilterFactoryBean;    }    @Bean    public SessionsSecurityManager securityManager() {        DefaultWebSecurityManager securityManager = new DefaultWebSecurityManager();        securityManager.setRealm(userRealm());        securityManager.setCacheManager(cacheManager());        securityManager.setSessionManager(sessionManager());        return securityManager;    }    @Bean    public DefaultWebSessionManager sessionManager() {        DefaultWebSessionManager sessionManager = new DefaultWebSessionManager();        sessionManager.setSessionIdUrlRewritingEnabled(false);        sessionManager.setSessionDAO(redisSessionDAO());        return sessionManager;    }    @Bean    public ShiroDialect shiroDialect(){        return new ShiroDialect();    }    /**     * cacheManager 缓存 redis实现     * @return     */    public RedisCacheManager cacheManager() {        RedisCacheManager redisCacheManager = new RedisCacheManager();        redisCacheManager.setRedisManager(redisManager());        return redisCacheManager;    }    /**     * 配置shiro redisManager     * @return     */    public RedisManager redisManager() {        RedisManager redisManager = new RedisManager(redis);        return redisManager;    }    /**     * RedisSessionDAO shiro sessionDao层的实现     * 原理就是重写 AbstractSessionDAO     * 有兴趣的小伙伴自行阅读源码     */    @Bean    public RedisSessionDAO redisSessionDAO() {        RedisSessionDAO redisSessionDAO = new RedisSessionDAO();        redisSessionDAO.setRedisManager(redisManager());        return redisSessionDAO;    }

登录后复制

以上就是SpringBoot整合Redis的方法的详细内容,更多请关注【创想鸟】其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至253000106@qq.com举报,一经查实,本站将立刻删除。

发布者:PHP中文网,转转请注明出处:https://www.chuangxiangniao.com/p/2031351.html

(0)
上一篇 2025年2月23日 22:06:52
下一篇 2025年2月23日 22:07:11

AD推荐 黄金广告位招租... 更多推荐

相关推荐

发表回复

登录后才能评论