瀏覽代碼

优化shiro配置

zhouhao 8 年之前
父節點
當前提交
621807f38c

+ 14 - 17
hsweb-authorization/hsweb-authorization-shiro/src/main/java/org/hswebframework/web/authorization/shiro/ShiroAutoconfiguration.java

@@ -25,6 +25,8 @@ import org.apache.shiro.cache.CacheManager;
 import org.apache.shiro.cache.MemoryConstrainedCacheManager;
 import org.apache.shiro.mgt.DefaultSecurityManager;
 import org.apache.shiro.mgt.SecurityManager;
+import org.apache.shiro.realm.AuthorizingRealm;
+import org.apache.shiro.realm.Realm;
 import org.apache.shiro.session.mgt.DefaultSessionManager;
 import org.apache.shiro.spring.LifecycleBeanPostProcessor;
 import org.apache.shiro.spring.web.ShiroFilterFactoryBean;
@@ -60,6 +62,7 @@ import org.springframework.web.bind.annotation.ResponseBody;
 import org.springframework.web.bind.annotation.ResponseStatus;
 import org.springframework.web.bind.annotation.RestControllerAdvice;
 
+import java.util.ArrayList;
 import java.util.Collections;
 import java.util.List;
 
@@ -78,6 +81,9 @@ public class ShiroAutoconfiguration {
     @Autowired
     private ShiroProperties shiroProperties;
 
+    @Autowired(required = false)
+    private List<DataAccessHandler> dataAccessHandlers;
+
     @Bean
     public CacheManager shiroCacheManager() {
         if (cacheManager == null) {
@@ -101,36 +107,27 @@ public class ShiroAutoconfiguration {
 
     @Bean(name = "securityManager")
     @ConditionalOnWebApplication
-    public DefaultWebSecurityManager defaultWebSecurityManager(ListenerAuthorizingRealm authorizingRealm) {
+    public DefaultWebSecurityManager defaultWebSecurityManager(List<AuthorizingRealm> authorizingRealm,
+                                                               CacheManager cacheManager) {
         DefaultWebSecurityManager securityManager = new DefaultWebSecurityManager();
-        securityManager.setRealm(authorizingRealm);
-        securityManager.setCacheManager(authorizingRealm.getCacheManager());
+        securityManager.setRealms(new ArrayList<>(authorizingRealm));
+        securityManager.setCacheManager(cacheManager);
         SecurityUtils.setSecurityManager(securityManager);
         return securityManager;
     }
 
     @Bean(name = "securityManager")
     @ConditionalOnNotWebApplication
-    public DefaultSecurityManager defaultSecurityManager(ListenerAuthorizingRealm authorizingRealm) {
+    public DefaultSecurityManager defaultSecurityManager(List<AuthorizingRealm> authorizingRealm,
+                                                         CacheManager cacheManager) {
         DefaultSecurityManager securityManager = new DefaultSecurityManager();
-        securityManager.setRealm(authorizingRealm);
-        securityManager.setCacheManager(authorizingRealm.getCacheManager());
+        securityManager.setRealms(new ArrayList<>(authorizingRealm));
+        securityManager.setCacheManager(cacheManager);
         securityManager.setSessionManager(new DefaultSessionManager());
         SecurityUtils.setSecurityManager(securityManager);
         return securityManager;
     }
 
-//    @Bean
-//    @ConditionalOnMissingBean
-//    public DefaultAdvisorAutoProxyCreator getDefaultAdvisorAutoProxyCreator() {
-//        DefaultAdvisorAutoProxyCreator advisorAutoProxyCreator = new DefaultAdvisorAutoProxyCreator();
-//        advisorAutoProxyCreator.setProxyTargetClass(true);
-//        return advisorAutoProxyCreator;
-//    }
-
-    @Autowired(required = false)
-    private List<DataAccessHandler> dataAccessHandlers;
-
     @Bean
     @ConditionalOnMissingBean
     public DefaultDataAccessController defaultDataAccessController() {