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,635評論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件蛉艾,死亡現(xiàn)場離奇詭異钳踊,居然都是意外死亡,警方通過查閱死者的電腦和手機勿侯,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,543評論 3 399
  • 文/潘曉璐 我一進店門拓瞪,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人助琐,你說我怎么就攤上這事祭埂。” “怎么了?”我有些...
    開封第一講書人閱讀 168,083評論 0 360
  • 文/不壞的土叔 我叫張陵蛆橡,是天一觀的道長舌界。 經(jīng)常有香客問我,道長泰演,這世上最難降的妖魔是什么呻拌? 我笑而不...
    開封第一講書人閱讀 59,640評論 1 296
  • 正文 為了忘掉前任,我火速辦了婚禮睦焕,結(jié)果婚禮上藐握,老公的妹妹穿的比我還像新娘。我一直安慰自己垃喊,他們只是感情好猾普,可當我...
    茶點故事閱讀 68,640評論 6 397
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著本谜,像睡著了一般初家。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上乌助,一...
    開封第一講書人閱讀 52,262評論 1 308
  • 那天溜在,我揣著相機與錄音,去河邊找鬼眷茁。 笑死炕泳,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的上祈。 我是一名探鬼主播培遵,決...
    沈念sama閱讀 40,833評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼登刺!你這毒婦竟也來了籽腕?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,736評論 0 276
  • 序言:老撾萬榮一對情侶失蹤纸俭,失蹤者是張志新(化名)和其女友劉穎皇耗,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體揍很,經(jīng)...
    沈念sama閱讀 46,280評論 1 319
  • 正文 獨居荒郊野嶺守林人離奇死亡郎楼,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,369評論 3 340
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了窒悔。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片呜袁。...
    茶點故事閱讀 40,503評論 1 352
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖简珠,靈堂內(nèi)的尸體忽然破棺而出阶界,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 36,185評論 5 350
  • 正文 年R本政府宣布膘融,位于F島的核電站芙粱,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏氧映。R本人自食惡果不足惜春畔,卻給世界環(huán)境...
    茶點故事閱讀 41,870評論 3 333
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望屯耸。 院中可真熱鬧拐迁,春花似錦蹭劈、人聲如沸疗绣。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,340評論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽多矮。三九已至,卻和暖如春哈打,著一層夾襖步出監(jiān)牢的瞬間塔逃,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,460評論 1 272
  • 我被黑心中介騙來泰國打工料仗, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留湾盗,地道東北人。 一個月前我還...
    沈念sama閱讀 48,909評論 3 376
  • 正文 我出身青樓立轧,卻偏偏與公主長得像格粪,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子氛改,可洞房花燭夜當晚...
    茶點故事閱讀 45,512評論 2 359

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