SpringBoot整合Shiro 集成Redis缓存(六)

简介:由于考虑到项目后期分布式部署,所以缓存由ehcache改为redis,而redis既有单机版部署,也有分布式部署,所以二者需要兼容。

1. maven依赖

<dependency>
    <groupId>org.crazycake</groupId>
    <artifactId>shiro-redis</artifactId>
    <version>3.1.0</version>
</dependency>

2. 设置缓存管理器,此处开启授权缓存,并加入securityManager中

  @Value("${spring.redis.cluster.nodes:}")
    private String nodes;

    @Value("${spring.redis.host:}")
    private String host;

    @Value("${spring.redis.port:6379}")
    private int port;

  /**
     * redis集群管理器
     *
     * @return redisClusterManager
     */
    @Bean
    public RedisClusterManager redisClusterManager() {
        RedisClusterManager redisClusterManager = new RedisClusterManager();
        redisClusterManager.setHost(this.nodes);

        return redisClusterManager;
    }

    /**
     * redis管理器
     *
     * @return redisManager
     */
    @Bean
    public RedisManager redisManager() {
        RedisManager redisManager = new RedisManager();
        redisManager.setHost(this.host);
        redisManager.setPort(this.port);

        return redisManager;
    }

    /**
     * redis缓存管理器
     *
     * @param redisClusterManager redis集群管理器
     * @param redisManager        redis管理器
     * @return cacheManager
     */
    @Bean
    public RedisCacheManager redisCacheManager(RedisClusterManager redisClusterManager, RedisManager redisManager) {
        RedisCacheManager redisCacheManager = new RedisCacheManager();
        redisCacheManager.setRedisManager(StrUtil.isNotBlank(this.nodes) ? redisClusterManager : redisManager);
        // 针对不同的用户缓存,由于principal是ShiroUser,所以需是里面的字段
        redisCacheManager.setPrincipalIdFieldName("id");
        redisCacheManager.setExpire((int) CommonConstant.PERMISSION_TIME);

        return redisCacheManager;
    }

    /**
     * token认证和授权验证器
     *
     * @param redisCacheManager 缓存管理器
     * @return jwtRealm
     */
    @Bean
    public JwtRealm jwtRealm(RedisCacheManager redisCacheManager) {
        JwtRealm jwtRealm = new JwtRealm();
        jwtRealm.setCredentialsMatcher(new JwtCredentialsMatcher());
        // 启用授权缓存
        jwtRealm.setAuthorizationCachingEnabled(true);
        jwtRealm.setAuthorizationCacheName(RedisConstant.AUTHORIZATION_CACHE);
        jwtRealm.setCacheManager(redisCacheManager);

        return jwtRealm;
    }

3. JwtRealm类集令牌token认证和授权认证,考虑到用户的权限会更改,所以在更改权限时需要清除授权缓存

  注意点:本处代码没有调用shiro自带的清除缓存方法,是由于项目引入的jedis是3.1版本,而shiro-redis里用的jedis是低版本不兼容,所以直接调用后会报错,故需要自己实现清除。

4. 常见错误见:SpringBoot整合Shiro 集成Ehcache缓存(四)

原文地址:https://www.cnblogs.com/ruhuanxingyun/p/12178910.html

时间: 2024-11-07 14:28:47

SpringBoot整合Shiro 集成Redis缓存(六)的相关文章

SpringBoot整合Shiro 涉及跨域和@Cacheable缓存/@Transactional事务注解失效问题(五)

1. 跨域(多出现在前后端分离项目中) (1) 跨域介绍可参考:跨域(CORS) (2) SpringBoot中解决跨域方式有: A. 使用@CrossOrigin注解: B. 实现Filter类,重写doFilter方法 package com.ruhuanxingyun.config; import cn.hutool.core.util.StrUtil; import org.springframework.context.annotation.Configuration; import

SpringBoot系列十二:SpringBoot整合 Shiro

1.概念:SpringBoot 整合 Shiro 2.具体内容 Shiro 是现在最为流行的权限认证开发框架,与它起名的只有最初的 SpringSecurity(这个开发框架非常不好用,但是千万不要 以为 SpringSecurity 没有用处,它在 SpringCloud 阶段将发挥重大的作用).但是现在如果要想整合 Shiro 开发框架有一点很遗憾, SpringBoot 没有直接的配置支持,它不像整合所谓的 Kafka.Redis.DataSource,也就是说如果要想整合 Shiro 开

springboot整合shiro应用

1.Shiro是Apache下的一个开源项目,我们称之为Apache Shiro.它是一个很易用与Java项目的的安全框架,提供了认证.授权.加密.会话管理,与spring Security 一样都是做一个权限的安全框架,但是与Spring Security 相比,在于 Shiro 使用了比较简单易懂易于使用的授权方式.shiro属于轻量级框架,相对于security简单的多,也没有security那么复杂.所以我这里也是简单介绍一下shiro的使用. 2.非常简单:其基本功能点如下图所示: A

SpringBoot整合Shiro (二)

Apache Shiro是一个强大且易用的Java安全框架,执行身份验证.授权.密码学和会话管理.相比较Spring Security,shiro有小巧.简单.易上手等的优点.所以很多框架都在使用shiro. Shiro包含了三个核心组件:Subject, SecurityManager 和 Realms. Subject 代表了当前用户的安全操作. SecurityManager 则管理所有用户的安全操作.它是Shiro框架的核心,典型的Facade模式,Shiro通过SecurityMana

SpringBoot 整合Shiro实现动态权限加载更新+Session共享+单点登录

作者:Sans_ juejin.im/post/5d087d605188256de9779e64 一.说明 Shiro是一个安全框架,项目中主要用它做认证,授权,加密,以及用户的会话管理,虽然Shiro没有SpringSecurity功能更丰富,但是它轻量,简单,在项目中通常业务需求Shiro也都能胜任. 二.项目环境 MyBatis-Plus版本: 3.1.0 SpringBoot版本:2.1.5 JDK版本:1.8 Shiro版本:1.4 Shiro-redis插件版本:3.1.0 数据表(

springboot学习笔记-5 springboot整合shiro

http://www.cnblogs.com/hlhdidi/p/6376457.html 亲自验证,该帖真实有效 shiro是一个权限框架,具体的使用可以查看其官网 http://shiro.apache.org/  它提供了很方便的权限认证和登录的功能. 而springboot作为一个开源框架,必然提供了和shiro整合的功能!接下来就用springboot结合springmvc,mybatis,整合shiro完成对于用户登录的判定和权限的验证. 1.准备数据库表结构 这里主要涉及到五张表:

Springboot 2.0 - 集成redis

序 最近在入门SpringBoot,然后在感慨 SpringBoot较于Spring真的方便多时,顺便记录下自己在集成redis时的一些想法. 1.从springboot官网查看redis的依赖包 <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-redis</artifactId> </dependen

springboot整合mybatis,mongodb,redis

springboot整合常用的第三方框架,mybatis,mongodb,redis mybatis,采用xml编写sql语句 mongodb,对MongoTemplate进行了封装 redis,对redisTemplate进行封装成工具类 可以基于该项目进行快速开发,省得以后每次开发又要重新整合一遍 项目结构: 属性配置文件 mybatis.mapper-locations=classpath*:/mapper/**/*.xml mybatis.type-aliases-package=com

前后端分离 springboot整合shiro

实现前后端的跨域,我是在后端配置类里实现 创建配置类 WebMvcConfig import org.springframework.context.annotation.Configuration; import org.springframework.web.servlet.config.annotation.CorsRegistry; import org.springframework.web.servlet.config.annotation.WebMvcConfigurer; //