Gunakan redis
storan berpusat untuk merealisasikan perkongsian kluster teragih maklumat pengguna Di sini kami menggunakan palam sumber terbuka pihak ketiga -inscrazycake
Untuk mencapai, pom.xml
memperkenalkan:
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-redis</artifactId> </dependency> <dependency> <groupId>org.crazycake</groupId> <artifactId>shiro-redis</artifactId> <version>3.2.3</version> </dependency>
Konfigurasi application.properties
:
# Redis # 数据库索引(默认为0) redis.database=0 # 服务器地址 变更为自己的 redis.host=127.0.0.1 # 服务器连接端口 redis.port=6379 # 服务器连接密码,如果不设置密码注释掉即可 # redis.password= # 连接超时时间(毫秒) redis.timeout=30000
Pada asalnya, pemalam crazycake
telah pun dilaksanakan RedisManager
, tetapi parameter tidak boleh dikonfigurasikan. Di sini kita perlu menulis semula:
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(); } }
Konfigurasi parameter RedisProperties
:
@Data @ConfigurationProperties(prefix = "redis") public class RedisProperties { private String host; private int port; private int timeout; private String password; private int database; }
Konfigurasi 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<String, String> 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; }
Atas ialah kandungan terperinci Bagaimana SpringBoot menyepadukan Redis. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!