springboot Shiro 配置類
ckage org.fh.config; import org.apache.shiro.cache.ehcache.EhCacheManager; import org.apache.shiro.spring.LifecycleBeanPostProcessor; import org.apache.shiro.spring.security.interceptor.AuthorizationAttributeSourceAdvisor; import org.apache.shiro.spring.web.ShiroFilterFactoryBean; import org.apache.shiro.web.mgt.DefaultWebSecurityManager; import org.fh.realm.MyShiroRealm; import org.springframework.aop.framework.autoproxy.DefaultAdvisorAutoProxyCreator; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.transaction.annotation.EnableTransactionManagement; import net.sf.ehcache.CacheManager; import java.util.LinkedHashMap; import java.util.Map; /** * 說明:Shiro 配置 * 作者:FH Admin * from:fhadmin.cn */ @Configuration @EnableTransactionManagement public class ShiroConfiguration { /** * ShiroFilterFactoryBean 處理攔截資原始檔問題 * 注意:單獨一個ShiroFilterFactoryBean配置是或報錯的,因為在 * 初始化ShiroFilterFactoryBean的時候需要注入:SecurityManager * * Filter Chain定義說明 * 1、一個URL可以配置多個Filter,使用逗號分隔 * 2、當設定多個過濾器時,全部驗證通過,才視為通過 * 3、部分過濾器可指定引數,如perms,roles */ @Bean(name = "shiroFilter") public ShiroFilterFactoryBean shiroFilterFactoryBean(DefaultWebSecurityManager securityManager) { ShiroFilterFactoryBean factoryBean = new MyShiroFilterFactoryBean(); factoryBean.setSecurityManager(securityManager); factoryBean.setLoginUrl("/"); // 如果不設定預設會自動尋找Web工程根目錄下的"/login.jsp"頁面 factoryBean.setSuccessUrl("/main/index"); // 登入成功後要跳轉的連線 factoryBean.setUnauthorizedUrl("/"); loadShiroFilterChain(factoryBean); return factoryBean; } /** * 載入ShiroFilter許可權控制規則 */ private void loadShiroFilterChain(ShiroFilterFactoryBean factoryBean) { /** 下面這些規則配置最好配置到配置檔案中 */ Map<String, String> filterChainMap = new LinkedHashMap<String, String>(); /** * authc:該過濾器下的頁面必須驗證後才能訪問,它是Shiro內建的一個攔截器 org.apache.shiro.web.filter.authc.FormAuthenticationFilter * anon:它對應的過濾器裡面是空的,什麼都沒做,可以理解為不攔截 * authc:所有url都必須認證通過才可以訪問; anon:所有url都都可以匿名訪問 */ filterChainMap.put("/404/**", "anon"); filterChainMap.put("/assets/**", "anon"); filterChainMap.put("/admin/check", "anon"); filterChainMap.put("/admin/islogin", "anon"); filterChainMap.put("/admin/register", "anon"); filterChainMap.put("/textextraction/add", "anon"); filterChainMap.put("/**", "authc"); factoryBean.setFilterChainDefinitionMap(filterChainMap); } @Bean public EhCacheManager ehCacheManager(CacheManager cacheManager) { EhCacheManager em = new EhCacheManager(); em.setCacheManager(cacheManager); return em; } @Bean(name = "myShiroRealm") public MyShiroRealm myShiroRealm(EhCacheManager ehCacheManager) { MyShiroRealm realm = new MyShiroRealm(); realm.setCacheManager(ehCacheManager); return realm; } @Bean(name = "lifecycleBeanPostProcessor") public LifecycleBeanPostProcessor lifecycleBeanPostProcessor() { return new LifecycleBeanPostProcessor(); } @Bean public DefaultAdvisorAutoProxyCreator defaultAdvisorAutoProxyCreator() { DefaultAdvisorAutoProxyCreator creator = new DefaultAdvisorAutoProxyCreator(); creator.setProxyTargetClass(true); return creator; } @Bean(name = "securityManager") public DefaultWebSecurityManager defaultWebSecurityManager(MyShiroRealm realm, EhCacheManager ehCacheManager) { DefaultWebSecurityManager securityManager = new DefaultWebSecurityManager(); securityManager.setRealm(realm); // 設定realm securityManager.setCacheManager(ehCacheManager); return securityManager; } @Bean public AuthorizationAttributeSourceAdvisor authorizationAttributeSourceAdvisor( DefaultWebSecurityManager securityManager) { AuthorizationAttributeSourceAdvisor advisor = new AuthorizationAttributeSourceAdvisor(); advisor.setSecurityManager(securityManager); return advisor; } /* * 1.LifecycleBeanPostProcessor,這是個DestructionAwareBeanPostProcessor的子類,負責org. * apache.shiro.util.Initializable型別bean的生命週期的,初始化和銷燬。主要是AuthorizingRealm類的子類, * 以及EhCacheManager類。 * 2.HashedCredentialsMatcher,這個類是為了對密碼進行編碼的,防止密碼在資料庫裡明碼儲存,當然在登陸認證的生活, * 這個類也負責對form裡輸入的密碼進行編碼。 * 3.ShiroRealm,這是個自定義的認證類,繼承自AuthorizingRealm,負責使用者的認證和許可權的處理,可以參考JdbcRealm的實現。 * 4.EhCacheManager,快取管理,使用者登陸成功後,把使用者資訊和許可權資訊快取起來,然後每次使用者請求時,放入使用者的session中, * 如果不設定這個bean,每個請求都會查詢一次資料庫。 * 5.SecurityManager,許可權管理,這個類組合了登陸,登出,許可權,session的處理,是個比較重要的類。 * 6.ShiroFilterFactoryBean,是個factorybean,為了生成ShiroFilter。它主要保持了三項資料, * securityManager,filters,filterChainDefinitionManager。 * 7.DefaultAdvisorAutoProxyCreator,Spring的一個bean,由Advisor決定對哪些類的方法進行AOP代理。 * 8.AuthorizationAttributeSourceAdvisor,shiro裡實現的Advisor類, * 內部使用AopAllianceAnnotationsAuthorizingMethodInterceptor來攔截用以下註解的方法。 */ }
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/31558068/viewspace-2853969/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- springboot 整合 Shiro 配置類Spring Boot
- springboot+shiro+jwt+vue配置全攻略Spring BootJWTVue
- 【Shiro】4.Springboot整合ShiroSpring Boot
- springboot-shiroSpring Boot
- springboot 跨域配置類Spring Boot跨域
- springboot+shiro整合Spring Boot
- SpringBoot_4_integrate_ShiroSpring Boot
- SpringBoot極簡整合ShiroSpring Boot
- 教你 Shiro + SpringBoot 整合 JWTSpring BootJWT
- 教你Shiro+SpringBoot整合JWTSpring BootJWT
- SpringBoot、MyBatis、Shiro、Thymeleaf整合思路Spring BootMyBatis
- 【Shiro第七篇】SpringBoot + Shiro實現會話管理Spring Boot會話
- 學習springBoot(11)shiro安全框架Spring Boot框架
- 備忘錄八:Shiro核心類
- springboot整合shiro實現身份認證Spring Boot
- SpringBoot中Shiro快取使用Redis、EhcacheSpring Boot快取Redis
- springboot-許可權控制shiro(二)Spring Boot
- springboot+shiro 整合與基本應用Spring Boot
- SpringBoot與Shiro整合-許可權管理Spring Boot
- Spingboot的Shiro的配置boot
- SpringBoot 整合 Shiro 實現登入攔截Spring Boot
- SpringBoot+Shiro學習(四):Realm授權Spring Boot
- 教你 Shiro 整合 SpringBoot,避開各種坑Spring Boot
- 使用shiro保護你的springboot應用Spring Boot
- SpringBoot--- Shiro(攔截,認證)、Thymeleaf(模板引擎)Spring Boot
- springboot + shiro 驗證碼與記住登入Spring Boot
- springboot 2.x 整合 shiro 許可權框架Spring Boot框架
- shiro多realm配置免密碼登陸密碼
- springboot配置Spring Boot
- springboot 配置Spring Boot
- springboot(十四):springboot整合shiro-登入認證和許可權管理Spring Boot
- SpringBoot+Shiro學習(七):Filter過濾器管理Spring BootFilter過濾器
- 從SpringBoot原始碼分析 主程式配置類載入過程Spring Boot原始碼
- jackson學習之十(終篇):springboot整合(配置類)Spring Boot
- 【Shiro學習筆記】一、Shiro具體使用(基於springboot2.x,前後端分離)筆記Spring Boot後端
- 在前後端分離專案中使用SpringBoot整合Shiro後端Spring Boot
- springboot常用配置Spring Boot
- SpringBoot配置WebSocketSpring BootWeb