|
@@ -10,8 +10,6 @@ import org.apache.shiro.session.mgt.SessionManager;
|
|
|
import org.apache.shiro.session.mgt.eis.SessionDAO;
|
|
|
import org.apache.shiro.spring.security.interceptor.AuthorizationAttributeSourceAdvisor;
|
|
|
import org.apache.shiro.spring.web.ShiroFilterFactoryBean;
|
|
|
-import org.apache.shiro.spring.web.config.DefaultShiroFilterChainDefinition;
|
|
|
-import org.apache.shiro.spring.web.config.ShiroFilterChainDefinition;
|
|
|
import org.apache.shiro.web.mgt.DefaultWebSecurityManager;
|
|
|
import org.apache.shiro.web.session.mgt.DefaultWebSessionManager;
|
|
|
import org.springframework.aop.framework.autoproxy.DefaultAdvisorAutoProxyCreator;
|
|
@@ -20,14 +18,17 @@ import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean
|
|
|
import org.springframework.context.annotation.Bean;
|
|
|
import org.springframework.context.annotation.Configuration;
|
|
|
import org.springframework.context.annotation.Lazy;
|
|
|
+import org.springframework.core.annotation.Order;
|
|
|
|
|
|
import java.util.LinkedHashMap;
|
|
|
import java.util.Map;
|
|
|
|
|
|
/**
|
|
|
*
|
|
|
+ * @author laowo
|
|
|
*/
|
|
|
@Configuration
|
|
|
+@Order(-1)
|
|
|
public class ShiroConfig {
|
|
|
//shiroFilter
|
|
|
@Bean
|
|
@@ -38,10 +39,9 @@ public class ShiroConfig {
|
|
|
shiroFilterFactoryBean.setLoginUrl("/sys/login");
|
|
|
//控制 访问xx资源 需要xx权限
|
|
|
Map<String, String> filterChainMap = new LinkedHashMap<>();
|
|
|
-
|
|
|
//swagger接口权限 开放
|
|
|
filterChainMap.put("/doc.html", "anon");
|
|
|
- filterChainMap.put("/webjars/**/**","anon");
|
|
|
+ filterChainMap.put("/webjars/**/**", "anon");
|
|
|
filterChainMap.put("/swagger-ui.html", "anon");
|
|
|
filterChainMap.put("/webjars/**", "anon");
|
|
|
filterChainMap.put("/v2/**", "anon");
|
|
@@ -53,33 +53,29 @@ public class ShiroConfig {
|
|
|
//swagger接口权限 开放
|
|
|
filterChainMap.put("/**", "authc");
|
|
|
shiroFilterFactoryBean.setFilterChainDefinitionMap(filterChainMap);
|
|
|
-
|
|
|
return shiroFilterFactoryBean;
|
|
|
}
|
|
|
|
|
|
//安全管理器
|
|
|
@Bean
|
|
|
- @Lazy
|
|
|
- public SecurityManager securityManager() {
|
|
|
+ public SecurityManager securityManager(@Qualifier("myRealm") Realm myRealm, @Qualifier("sessionManager") SessionManager sessionManager) {
|
|
|
DefaultWebSecurityManager securityManager = new DefaultWebSecurityManager();
|
|
|
- securityManager.setSessionManager(sessionManager());
|
|
|
- securityManager.setRealm(myRealm());
|
|
|
+ securityManager.setSessionManager(sessionManager);
|
|
|
+ securityManager.setRealm(myRealm);
|
|
|
return securityManager;
|
|
|
}
|
|
|
|
|
|
+ //缓存管理
|
|
|
+ @Bean(name = "mycacheManager")
|
|
|
+ public CacheManager mycacheManager() {
|
|
|
+ return new MyRedisCacheManager();
|
|
|
+ }
|
|
|
|
|
|
-// @Bean("SecurityManager")
|
|
|
-// public SecurityManager securityManager() {
|
|
|
-// DefaultWebSecurityManager defaultWebSecurityManager = new DefaultWebSecurityManager();
|
|
|
-// // DefaultWebSecurityManager defaultWebSecurityManager = SpringUtil.getBean(DefaultWebSecurityManager.class);
|
|
|
-// //关联Reaml
|
|
|
-// // ApplicationContext().getBean()
|
|
|
-// defaultWebSecurityManager.setRealm(getRealm());
|
|
|
-// return defaultWebSecurityManager;
|
|
|
-// }
|
|
|
|
|
|
- @Bean
|
|
|
- public Realm myRealm() {
|
|
|
+
|
|
|
+
|
|
|
+ @Bean(name = "myRealm")
|
|
|
+ public Realm myRealm(@Qualifier("mycacheManager") CacheManager mycacheManager) {
|
|
|
MyRealm myRealm = new MyRealm();
|
|
|
//告诉realm密码匹配方式
|
|
|
myRealm.setCredentialsMatcher(credentialsMatcher());
|
|
@@ -87,16 +83,10 @@ public class ShiroConfig {
|
|
|
myRealm.setAuthorizationCachingEnabled(true);
|
|
|
myRealm.setAuthenticationCachingEnabled(false);
|
|
|
//设置缓存管理器
|
|
|
- myRealm.setCacheManager(MycacheManager());
|
|
|
+ myRealm.setCacheManager(mycacheManager);
|
|
|
return myRealm;
|
|
|
}
|
|
|
|
|
|
- //缓存管理
|
|
|
- @Bean
|
|
|
- public CacheManager MycacheManager() {
|
|
|
- MyRedisCacheManager cacheManager = new MyRedisCacheManager();
|
|
|
- return cacheManager;
|
|
|
- }
|
|
|
|
|
|
@Bean
|
|
|
public CredentialsMatcher credentialsMatcher() {
|
|
@@ -135,25 +125,23 @@ public class ShiroConfig {
|
|
|
* @return
|
|
|
*/
|
|
|
@Bean
|
|
|
- public SessionManager sessionManager() {
|
|
|
+ public SessionManager sessionManager(@Qualifier("redisSessionDAO") SessionDAO redisSessionDAO) {
|
|
|
DefaultWebSessionManager sessionManager = new DefaultWebSessionManager();
|
|
|
- sessionManager.setSessionDAO(redisSessionDAO());
|
|
|
-
|
|
|
+ sessionManager.setSessionDAO(redisSessionDAO);
|
|
|
//设置会话过期时间
|
|
|
sessionManager.setGlobalSessionTimeout(3 * 60 * 1000); //默认半小时
|
|
|
sessionManager.setDeleteInvalidSessions(true); //默认自定调用SessionDAO的delete方法删除会话
|
|
|
//设置会话定时检查
|
|
|
- // sessionManager.setSessionValidationInterval(180000); //默认一小时
|
|
|
- // sessionManager.setSessionValidationSchedulerEnabled(true);
|
|
|
+ sessionManager.setSessionValidationInterval(180000); //默认一小时
|
|
|
+ sessionManager.setSessionValidationSchedulerEnabled(true);
|
|
|
return sessionManager;
|
|
|
}
|
|
|
|
|
|
- @Bean
|
|
|
+ @Bean(name = "redisSessionDAO")
|
|
|
public SessionDAO redisSessionDAO() {
|
|
|
ShiroRedisSessionDao redisDAO = new ShiroRedisSessionDao();
|
|
|
return redisDAO;
|
|
|
}
|
|
|
|
|
|
|
|
|
-
|
|
|
}
|