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舔痪、部分過濾器可指定參數(shù)津滞,如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"); // 登錄成功后要跳轉(zhuǎn)的連接

factoryBean.setUnauthorizedUrl("/");

loadShiroFilterChain(factoryBean);

return factoryBean;

}

/**

* 加載ShiroFilter權(quán)限控制規(guī)則

*/

private void loadShiroFilterChain(ShiroFilterFactoryBean factoryBean) {

/** 下面這些規(guī)則配置最好配置到配置文件中 */

Map<String, String> filterChainMap = new LinkedHashMap<String, String>();

/**

* authc:該過濾器下的頁面必須驗證后才能訪問灼伤,它是Shiro內(nèi)置的一個攔截器 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孔祸,這個類是為了對密碼進行編碼的,防止密碼在數(shù)據(jù)庫里明碼保存发皿,當然在登陸認證的生活吕朵,

* 這個類也負責對form里輸入的密碼進行編碼形入。

* 3.ShiroRealm弃甥,這是個自定義的認證類斋枢,繼承自AuthorizingRealm,負責用戶的認證和權(quán)限的處理玄货,可以參考JdbcRealm的實現(xiàn)皇钞。

* 4.EhCacheManager,緩存管理松捉,用戶登陸成功后夹界,把用戶信息和權(quán)限信息緩存起來,然后每次用戶請求時隘世,放入用戶的session中可柿,

* 如果不設置這個bean,每個請求都會查詢一次數(shù)據(jù)庫丙者。

* 5.SecurityManager复斥,權(quán)限管理,這個類組合了登陸械媒,登出目锭,權(quán)限,session的處理滥沫,是個比較重要的類侣集。

* 6.ShiroFilterFactoryBean,是個factorybean兰绣,為了生成ShiroFilter。它主要保持了三項數(shù)據(jù)编振,

* securityManager缀辩,filters臭埋,filterChainDefinitionManager。

* 7.DefaultAdvisorAutoProxyCreator臀玄,Spring的一個bean瓢阴,由Advisor決定對哪些類的方法進行AOP代理。

* 8.AuthorizationAttributeSourceAdvisor健无,shiro里實現(xiàn)的Advisor類荣恐,

* 內(nèi)部使用AopAllianceAnnotationsAuthorizingMethodInterceptor來攔截用以下注解的方法。

*/

}

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末累贤,一起剝皮案震驚了整個濱河市叠穆,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌臼膏,老刑警劉巖硼被,帶你破解...
    沈念sama閱讀 221,576評論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異渗磅,居然都是意外死亡嚷硫,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,515評論 3 399
  • 文/潘曉璐 我一進店門始鱼,熙熙樓的掌柜王于貴愁眉苦臉地迎上來仔掸,“玉大人,你說我怎么就攤上這事医清〖翁” “怎么了?”我有些...
    開封第一講書人閱讀 168,017評論 0 360
  • 文/不壞的土叔 我叫張陵状勤,是天一觀的道長鞋怀。 經(jīng)常有香客問我,道長持搜,這世上最難降的妖魔是什么密似? 我笑而不...
    開封第一講書人閱讀 59,626評論 1 296
  • 正文 為了忘掉前任,我火速辦了婚禮葫盼,結(jié)果婚禮上残腌,老公的妹妹穿的比我還像新娘。我一直安慰自己贫导,他們只是感情好抛猫,可當我...
    茶點故事閱讀 68,625評論 6 397
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著孩灯,像睡著了一般闺金。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上峰档,一...
    開封第一講書人閱讀 52,255評論 1 308
  • 那天败匹,我揣著相機與錄音寨昙,去河邊找鬼。 笑死掀亩,一個胖子當著我的面吹牛舔哪,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播槽棍,決...
    沈念sama閱讀 40,825評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼捉蚤,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了炼七?” 一聲冷哼從身側(cè)響起缆巧,我...
    開封第一講書人閱讀 39,729評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎特石,沒想到半個月后盅蝗,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,271評論 1 320
  • 正文 獨居荒郊野嶺守林人離奇死亡姆蘸,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,363評論 3 340
  • 正文 我和宋清朗相戀三年墩莫,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片逞敷。...
    茶點故事閱讀 40,498評論 1 352
  • 序言:一個原本活蹦亂跳的男人離奇死亡狂秦,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出推捐,到底是詐尸還是另有隱情裂问,我是刑警寧澤,帶...
    沈念sama閱讀 36,183評論 5 350
  • 正文 年R本政府宣布牛柒,位于F島的核電站堪簿,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏皮壁。R本人自食惡果不足惜椭更,卻給世界環(huán)境...
    茶點故事閱讀 41,867評論 3 333
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望蛾魄。 院中可真熱鬧虑瀑,春花似錦、人聲如沸滴须。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,338評論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽扔水。三九已至痛侍,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間铭污,已是汗流浹背恋日。 一陣腳步聲響...
    開封第一講書人閱讀 33,458評論 1 272
  • 我被黑心中介騙來泰國打工膀篮, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留嘹狞,地道東北人岂膳。 一個月前我還...
    沈念sama閱讀 48,906評論 3 376
  • 正文 我出身青樓,卻偏偏與公主長得像磅网,于是被迫代替她去往敵國和親谈截。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 45,507評論 2 359

推薦閱讀更多精彩內(nèi)容