Shiro集成redis实现session共享

本文详细介绍了如何在Java项目中使用Shiro与Redis集成,实现session的跨应用共享。首先,搭建了redis的基本环境,包括添加依赖和配置文件。接着,配置Shiro,包括导入Shiro相关依赖,编写Shiro配置类和自定义Realm,以处理用户认证与授权。特别地,针对Redis缓存管理,创建了自定义的RedisCache实现并配置了序列化方式,确保在分布式环境下能正确进行session共享。最后,通过测试验证了session在分布式项目中的共享功能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一. 搭建redis基本环境

①加入redis相关依赖

		<!-- 支持redis依赖-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-redis</artifactId>
        </dependency>
        <!-- Spring Session 分布式事务 ,在登录时使用 -->
        <dependency>
            <groupId>org.springframework.session</groupId>
            <artifactId>spring-session-data-redis</artifactId>
        </dependency>
        <!-- spring-session -->
        <dependency>
            <groupId>org.springframework.session</groupId>
            <artifactId>spring-session-core</artifactId>
        </dependency>

②写入redis的application.yml配置文件

#配置连接redis的参数
spring:
  redis:
    cluster:
    #配置redis集群节点
      nodes: 92.168.10.140:8001,192.168.10.140:8002,192.168.10.140:8003,192.168.10.140:8004,192.168.10.140:8005,192.168.10.140:8006
  session:
    store-type: redis #存放session的存储方式
    redis:
      flush-mode: on_save #配置session刷新方式
    timeout: 30m #设置session超时时间

这样redis的基本环境就搭建完成了。

二. shiro认证授权实现

①导入shiro相关依赖

		<dependency>
            <groupId>org.apache.shiro</groupId>
            <artifactId>shiro-spring</artifactId>
            <version>1.4.0</version>
        </dependency>
        
        <dependency>
            <groupId>org.apache.shiro</groupId>
            <artifactId>shiro-web</artifactId>
            <version>1.4.0</version>
        </dependency>

②配置shiro

Shiro 配置类-》ShiroConfig.java
–负责配置shiro的资源配置、安全管理器对象、和管理自定义的realm对象

@Configuration
public class ShiroConfig {
   
   

    //创建shiroFilter(shiro拦截器对象--负责拦截所有请求)
    @Bean
    public ShiroFilterFactoryBean getShiroFilterFactoryBean(DefaultWebSecurityManager defaultWebSecurityManager){
   
   
        ShiroFilterFactoryBean shiroFilterFactoryBean=new ShiroFilterFactoryBean();
        //给Filter设置安全管理器
        shiroFilterFactoryBean.setSecurityManager(defaultWebSecurityManager);
       
        //配置系统受限资源
        //配置系统公共资源
        Map<String,String> map=new HashMap<String,String>();
        
        /*资源配置
        map.put("/index","authc");//authc受限资源需要认证才能访问(“/**”)表示所有资源
		map.put("/","anon");//anon设置公共资源
		map.put("/**","authc");//存在‘/**’时未受限的资源必须写在上面,否则将被覆盖
        //默认认证界面路径(认证失败会自动重定向返回到该路径界面)
        */
        
        shiroFilterFactoryBean.setLoginUrl("/login");

        shiroFilterFactoryBean.setFilterChainDefinitionMap(map);

        return shiroFilterFactoryBean;
    }

    //创建安全管理对象
    @Bean
    public DefaultWebSecurityManager getDefaultWebSecurityManager(Realm realm){
   
   
        DefaultWebSecurityManager defaultWebSecurityManager = new DefaultWebSecurityManager();
        //给安全管理器设置Realm
        defaultWebSecurityManager.setRealm(realm);
        return defaultWebSecurityManager;
    }
    //创建自定义Realm
    @Bean
    public Realm getRealm(){
   
   
        CustomerRealm customerRealm = new CustomerRealm();
        //修改凭证匹配器
        HashedCredentialsMatcher credentialsMatcher 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值