|  |  |  | 
|---|
|  |  |  | package doumeemes.config.shiro; | 
|---|
|  |  |  |  | 
|---|
|  |  |  | import doumeemes.task.ScheduleTool; | 
|---|
|  |  |  | import org.apache.shiro.mgt.SecurityManager; | 
|---|
|  |  |  | import org.apache.shiro.session.mgt.SessionManager; | 
|---|
|  |  |  | import org.apache.shiro.spring.security.interceptor.AuthorizationAttributeSourceAdvisor; | 
|---|
|  |  |  | import org.apache.shiro.spring.web.ShiroFilterFactoryBean; | 
|---|
|  |  |  | import org.apache.shiro.util.ThreadContext; | 
|---|
|  |  |  | import org.apache.shiro.web.mgt.DefaultWebSecurityManager; | 
|---|
|  |  |  | import org.springframework.aop.framework.autoproxy.DefaultAdvisorAutoProxyCreator; | 
|---|
|  |  |  | import org.springframework.beans.factory.annotation.Autowired; | 
|---|
|  |  |  | import org.springframework.beans.factory.annotation.Value; | 
|---|
|  |  |  | import org.springframework.context.annotation.Bean; | 
|---|
|  |  |  | import org.springframework.context.annotation.Configuration; | 
|---|
|  |  |  | import org.springframework.data.redis.connection.RedisConnectionFactory; | 
|---|
|  |  |  | import org.springframework.data.redis.core.RedisTemplate; | 
|---|
|  |  |  | import org.springframework.data.redis.serializer.StringRedisSerializer; | 
|---|
|  |  |  |  | 
|---|
|  |  |  | import javax.servlet.Filter; | 
|---|
|  |  |  | import java.util.HashMap; | 
|---|
|  |  |  | import java.io.Serializable; | 
|---|
|  |  |  | import java.util.LinkedHashMap; | 
|---|
|  |  |  | import java.util.Map; | 
|---|
|  |  |  |  | 
|---|
|  |  |  | /** | 
|---|
|  |  |  | * Shiro配置 | 
|---|
|  |  |  | * @author Eva.Caesar Liu | 
|---|
|  |  |  | * @date 2022/04/18 18:12 | 
|---|
|  |  |  | * @date 2023/04/17 12:11 | 
|---|
|  |  |  | */ | 
|---|
|  |  |  | //@Configuration | 
|---|
|  |  |  | @Configuration | 
|---|
|  |  |  | public class ShiroConfig { | 
|---|
|  |  |  |  | 
|---|
|  |  |  | @Value("${cache.session.expire}") | 
|---|
|  |  |  | 
|---|
|  |  |  | @Autowired | 
|---|
|  |  |  | private ShiroRealm shiroRealm; | 
|---|
|  |  |  |  | 
|---|
|  |  |  | @Bean("sessionRedisTemplate") | 
|---|
|  |  |  | public RedisTemplate<Object, Serializable> sessionRedisTemplate(RedisConnectionFactory redisConnectionFactory) { | 
|---|
|  |  |  | RedisTemplate<Object, Serializable> redisTemplate = new RedisTemplate<>(); | 
|---|
|  |  |  | redisTemplate.setConnectionFactory(redisConnectionFactory); | 
|---|
|  |  |  | // 默认序列化方式 | 
|---|
|  |  |  | redisTemplate.setDefaultSerializer(new StringRedisSerializer()); | 
|---|
|  |  |  | // 值序列化方式 | 
|---|
|  |  |  | ShiroSessionSerializer serializer = new ShiroSessionSerializer(); | 
|---|
|  |  |  | redisTemplate.setValueSerializer(serializer); | 
|---|
|  |  |  | redisTemplate.setHashValueSerializer(serializer); | 
|---|
|  |  |  | redisTemplate.afterPropertiesSet(); | 
|---|
|  |  |  | return redisTemplate; | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | @Bean | 
|---|
|  |  |  | public DefaultAdvisorAutoProxyCreator defaultAdvisorAutoProxyCreator() { | 
|---|
|  |  |  | DefaultAdvisorAutoProxyCreator autoProxyCreator = new DefaultAdvisorAutoProxyCreator(); | 
|---|
|  |  |  | 
|---|
|  |  |  | public SessionManager sessionManager() { | 
|---|
|  |  |  | ShiroSessionManager sessionManager = new ShiroSessionManager(); | 
|---|
|  |  |  | sessionManager.setSessionDAO(shiroSessionDAO); | 
|---|
|  |  |  | sessionManager.setGlobalSessionTimeout(sessionExpireTime*1000); | 
|---|
|  |  |  | // 删除失效的session | 
|---|
|  |  |  | sessionManager.setDeleteInvalidSessions(true); | 
|---|
|  |  |  | return sessionManager; | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | 
|---|
|  |  |  | securityManager.setRealm(shiroRealm); | 
|---|
|  |  |  | securityManager.setSessionManager(this.sessionManager()); | 
|---|
|  |  |  | securityManager.setCacheManager(shiroCacheManager); | 
|---|
|  |  |  | ThreadContext.bind(securityManager); | 
|---|
|  |  |  | return securityManager; | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|