一步一步教你用shiro——1引入shiro框架

shiro這個(gè)權(quán)限框架確實(shí)很實(shí)用很方便,網(wǎng)上關(guān)于它的分析也很多犀勒,但是有很多資料都太老了。尚硅谷的視頻教程中關(guān)于session管理的部分有錯(cuò)誤。《一頭扎進(jìn)shiro》是老版本shiro而且太淺了(硬是說session用web容器的就夠了饭玲,沒必要改伊履,敢情你家應(yīng)用都是單實(shí)例的?)艺骂,慕課網(wǎng)的視頻最全面,但是不夠細(xì)隆夯。有很多問題只能自己看源碼钳恕,做嘗試解決别伏。

所以將shiro的一些經(jīng)驗(yàn)記錄下來,希望能幫助到讀到本文的你忧额,本文環(huán)境shiro1.3.2厘肮、spring4.3.5沒有使用boot、jdk8睦番、tomcat8.5类茂、mysql5.6、redis3.2.11

目標(biāo):通過shiro實(shí)現(xiàn)對(duì)后端接口進(jìn)行權(quán)限控制托嚣,所有靜態(tài)資源都不需要權(quán)限驗(yàn)證巩检,使用redis實(shí)現(xiàn)session共享,避免session單點(diǎn)問題

  • shiro1.4.0在17年5月份就有了示启,但是現(xiàn)在shiro官網(wǎng)上還是說1.3.2是最后的穩(wěn)定版兢哭,為了保險(xiǎn),還是用這個(gè)老版本
  • shiro不推薦使用shiro-all這個(gè)總包夫嗓,可能會(huì)造成maven工作不正常迟螺,一般常用的是core、spring舍咖、web這三個(gè)包
        <!--工程中單獨(dú)引入了slf4j矩父,不去除的話jar包沖突-->
        <!--可以使用該命令查看jar包是否有沖突,mvn dependency:tree -Dverbose|grep conflict-->
        <dependency>
            <groupId>org.apache.shiro</groupId>
            <artifactId>shiro-core</artifactId>
            <version>1.3.2</version>
            <exclusions>
                <exclusion>
                    <groupId>org.slf4j</groupId>
                    <artifactId>slf4j-api</artifactId>
                </exclusion>
            </exclusions>
        </dependency>
        <dependency>
            <groupId>org.apache.shiro</groupId>
            <artifactId>shiro-web</artifactId>
            <version>1.3.2</version>
        </dependency>
        <dependency>
            <groupId>org.apache.shiro</groupId>
            <artifactId>shiro-spring</artifactId>
            <version>1.3.2</version>
        </dependency>
  • web.xml中增加spring的代理filter谎仲,實(shí)際filter是shiro的ShiroFilterFactoryBean(后面說ShiroFilterFactoryBean的具體配置)浙垫,targetFilterLifecycle為true代表由spring控制該filter的生命周期。
  • 一般這段配置不需要改郑诺,只需要改url-pattern夹姥。shiro源碼中的sample配的是/*,因?yàn)槲抑幌肟刂朴脩粼L問后端接口的權(quán)限辙诞,靜態(tài)資源可以隨便訪問辙售,所以后端接口都用的api開頭,讓shiro過濾器只對(duì)api開頭的請(qǐng)求生效(這樣還可以避免頻繁訪問session飞涂,造成redis壓力過大的問題旦部,具體后面說)
    <filter>
        <filter-name>shiroFilter</filter-name>
        <filter-class>org.springframework.web.filter.DelegatingFilterProxy</filter-class>
        <init-param>
            <param-name>targetFilterLifecycle</param-name>
            <param-value>true</param-value>
        </init-param>
    </filter>
    <filter-mapping>
        <filter-name>shiroFilter</filter-name>
        <url-pattern>/api/*</url-pattern>
    </filter-mapping>
  • 在spring的配置文件中配置ShiroFilterFactoryBean,注意id一定要和web.xml中 的filter-name一致较店,否則proxyFilter找不到實(shí)際filter士八。
  • shiro的內(nèi)置過濾器可以百度每個(gè)的含義和配制方法,這里需要說下authc梁呈。使用authc的接口是一定要輸入用戶名密碼登陸后才能訪問婚度,哪怕通過shiro的rememberMe自動(dòng)登錄的用戶也需要重新輸入用戶名密碼重新登錄后才能訪問。
  • 就像我們平時(shí)訪問淘寶官卡,一進(jìn)網(wǎng)站就自動(dòng)登錄了蝗茁,但是第一次做敏感操作的時(shí)候還是要輸入用戶名密碼登陸進(jìn)行一次認(rèn)證醋虏,然后再做敏感操作都不需要輸入用戶名密碼了。
    <!--配置全局權(quán)限過濾器-->
    <bean id="shiroFilter" class="org.apache.shiro.spring.web.ShiroFilterFactoryBean">
        <!--shiro最核心組件哮翘,具體后面說-->
        <property name="securityManager" ref="securityManager"/>
        <!--設(shè)置沒有登錄時(shí)的跳轉(zhuǎn)地址-->
        <property name="loginUrl" value="/static/html/login.html"/>
        <!--設(shè)置權(quán)限不足時(shí)的跳轉(zhuǎn)地址-->
        <property name="unauthorizedUrl" value="/static/html/noPerm.html"/>
        <!--對(duì)哪個(gè)后端接口使用哪個(gè)過濾器進(jìn)行配置颈嚼,等號(hào)后邊是shiro內(nèi)置過濾器的名字-->
        <property name="filterChainDefinitions">
            <value>
                <!--匿名訪問,/api/login是登陸接口饭寺,當(dāng)然可以隨便訪問-->
                /api/login = anon
                /api/test? = authc
                <!--本工程中上傳文件的接口阻课,只允許有common角色的用戶訪問-->
                /api/file = roles[common]
                <!--用戶退出登錄的接口,后端不需要實(shí)現(xiàn)該接口佩研,logout攔截到/api/logout的url后柑肴,就自動(dòng)清除登錄狀態(tài)回到首頁了-->
                <!--因?yàn)樵趙eb.xml中設(shè)置的url-parttern是/api/*,隨意只有api開頭的url才會(huì)被攔截-->
                /api/logout = logout
                <!--使用自定義攔截器的接口-->
                <!--/api/selfFilter = myFilter-->
                <!--其他所有接口都需要認(rèn)證旬薯,也就是需要之前輸入過賬號(hào)密碼登錄過-->
                /** = authc
            </value>
        </property>
        <!--加入自定義filter,在filterChainDefinitions可以通過key來引用-->
        <!--<property name="filters">-->
            <!--<map>-->
                <!--<entry key="myFilter">-->
                    <!--<bean class="MyFilter"/>-->
                <!--</entry>-->
            <!--</map>-->
        <!--</property>-->
    </bean>
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末适秩,一起剝皮案震驚了整個(gè)濱河市绊序,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌秽荞,老刑警劉巖骤公,帶你破解...
    沈念sama閱讀 206,968評(píng)論 6 482
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異扬跋,居然都是意外死亡阶捆,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,601評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門钦听,熙熙樓的掌柜王于貴愁眉苦臉地迎上來洒试,“玉大人,你說我怎么就攤上這事朴上±萜澹” “怎么了?”我有些...
    開封第一講書人閱讀 153,220評(píng)論 0 344
  • 文/不壞的土叔 我叫張陵痪宰,是天一觀的道長(zhǎng)叼架。 經(jīng)常有香客問我,道長(zhǎng)衣撬,這世上最難降的妖魔是什么乖订? 我笑而不...
    開封第一講書人閱讀 55,416評(píng)論 1 279
  • 正文 為了忘掉前任,我火速辦了婚禮具练,結(jié)果婚禮上乍构,老公的妹妹穿的比我還像新娘。我一直安慰自己靠粪,他們只是感情好蜡吧,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,425評(píng)論 5 374
  • 文/花漫 我一把揭開白布毫蚓。 她就那樣靜靜地躺著,像睡著了一般昔善。 火紅的嫁衣襯著肌膚如雪元潘。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,144評(píng)論 1 285
  • 那天君仆,我揣著相機(jī)與錄音翩概,去河邊找鬼。 笑死返咱,一個(gè)胖子當(dāng)著我的面吹牛钥庇,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播咖摹,決...
    沈念sama閱讀 38,432評(píng)論 3 401
  • 文/蒼蘭香墨 我猛地睜開眼评姨,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來了萤晴?” 一聲冷哼從身側(cè)響起吐句,我...
    開封第一講書人閱讀 37,088評(píng)論 0 261
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎店读,沒想到半個(gè)月后嗦枢,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,586評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡屯断,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,028評(píng)論 2 325
  • 正文 我和宋清朗相戀三年文虏,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片殖演。...
    茶點(diǎn)故事閱讀 38,137評(píng)論 1 334
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡氧秘,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出剃氧,到底是詐尸還是另有隱情敏储,我是刑警寧澤,帶...
    沈念sama閱讀 33,783評(píng)論 4 324
  • 正文 年R本政府宣布朋鞍,位于F島的核電站已添,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏滥酥。R本人自食惡果不足惜更舞,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,343評(píng)論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望坎吻。 院中可真熱鬧缆蝉,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,333評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至原杂,卻和暖如春印颤,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背穿肄。 一陣腳步聲響...
    開封第一講書人閱讀 31,559評(píng)論 1 262
  • 我被黑心中介騙來泰國(guó)打工年局, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人咸产。 一個(gè)月前我還...
    沈念sama閱讀 45,595評(píng)論 2 355
  • 正文 我出身青樓矢否,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親脑溢。 傳聞我的和親對(duì)象是個(gè)殘疾皇子僵朗,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,901評(píng)論 2 345

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

  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn)焚志,斷路器衣迷,智...
    卡卡羅2017閱讀 134,601評(píng)論 18 139
  • 說明:本文很多觀點(diǎn)和內(nèi)容來自互聯(lián)網(wǎng)以及各種資料,如果侵犯了您的權(quán)益酱酬,請(qǐng)及時(shí)聯(lián)系我,我會(huì)刪除相關(guān)內(nèi)容云矫。 權(quán)限管理 基...
    寇寇寇先森閱讀 7,578評(píng)論 8 76
  • 后臺(tái)管理系統(tǒng) 業(yè)務(wù)場(chǎng)景 spring boot + mybatis后臺(tái)管理系統(tǒng)框架膳沽; layUI前端界面; shi...
    漢若已認(rèn)證閱讀 9,971評(píng)論 2 69
  • 一让禀、架構(gòu) 要學(xué)習(xí)如何使用Shiro必須先從它的架構(gòu)談起挑社,作為一款安全框架Shiro的設(shè)計(jì)相當(dāng)精妙。Shiro的應(yīng)用...
    ITsupuerlady閱讀 3,520評(píng)論 4 32
  • 在這個(gè)速度迭代的社會(huì)巡揍,變化是復(fù)雜的痛阻。在這個(gè)多變的社會(huì),你是背書別人的品牌腮敌,還是購買別人的品牌阱当,還是自己成為導(dǎo)航品牌...
    左葉右李閱讀 219評(píng)論 0 0