Shiro集成redis实现session共享
一. 搭建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