SpringSecurity個(gè)人筆記

本次項(xiàng)目中使用了SpringSecurity驗(yàn)證框架來(lái)對(duì)項(xiàng)目進(jìn)行一個(gè)驗(yàn)證阔墩。
以下是對(duì)框架的使用做一下記錄。

框架搭建

maven配置

主要的是導(dǎo)入三個(gè)包:

    <!--Spring Security相關(guān)-->
    <!-- https://mvnrepository.com/artifact/org.springframework.security/spring-security-core -->
    <dependency>
      <groupId>org.springframework.security</groupId>
      <artifactId>spring-security-core</artifactId>
      <version>4.2.2.RELEASE</version>
    </dependency>


    <!-- https://mvnrepository.com/artifact/org.springframework.security/spring-security-web -->
    <dependency>
      <groupId>org.springframework.security</groupId>
      <artifactId>spring-security-web</artifactId>
      <version>4.2.2.RELEASE</version>
    </dependency>


    <!-- https://mvnrepository.com/artifact/org.springframework.security/spring-security-config -->
    <dependency>
      <groupId>org.springframework.security</groupId>
      <artifactId>spring-security-config</artifactId>
      <version>4.2.2.RELEASE</version>
    </dependency>

web.xml配置

主要是配置SpringSecurity的過(guò)濾鏈

  <filter>
    <filter-name>springSecurityFilterChain</filter-name>
    <filter-class>org.springframework.web.filter.DelegatingFilterProxy</filter-class>
  </filter>

  <filter-mapping>
    <filter-name>springSecurityFilterChain</filter-name>
    <url-pattern>/*</url-pattern>
  </filter-mapping>

然后就是SpringSecurity配置文件

我們從最簡(jiǎn)單的配置開(kāi)始

<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:security="http://www.springframework.org/schema/security"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
        http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
        http://www.springframework.org/schema/security
        http://www.springframework.org/schema/security/spring-security.xsd">

    <security:http pattern="/**" auto-config="true">
        <security:intercept-url pattern="/**" access="hasRole('ROLE_USER')"/>
        <security:form-login />
    </security:http>
    <security:authentication-manager>
        <security:authentication-provider>
            <security:user-service>
                <security:user name="myName" authorities="ROLE_USER" password="123456"/>
            </security:user-service>
        </security:authentication-provider>
    </security:authentication-manager>
</beans>

如果后端配置好的話彩扔,運(yùn)行后的頁(yè)面會(huì)被SpringSecurity攔截到登錄頁(yè)面馒索。這個(gè)登錄頁(yè)面是SpringSecurity自動(dòng)生成的。

Paste_Image.png

在配置文件中我們?cè)?lt;security:authentication-manager></security:authentication-manager>中配置了賬號(hào)密碼 輸入 賬號(hào):myName 密碼:123456 即可登錄成功繼續(xù)訪問(wèn)該系統(tǒng)頁(yè)面唱遭。

自定義登錄頁(yè)面

使用框架自動(dòng)為我們生成的頁(yè)面自然不能滿足我們的需求幻梯,所以我們需要自定義登錄頁(yè)面兜畸。

配置文件

修改<security:http>標(biāo)簽

    <security:http pattern="/**" auto-config="true">
        <security:intercept-url pattern="/**" access="hasRole('ROLE_USER')"/>
        <security:form-login login-page="/html/myLogin.html" login-processing-url="/myLogin" always-use-default-target="true"
                             username-parameter="name" password-parameter="password"
                             default-target-url="/html/home.html"
                             authentication-failure-url="/html/login_failure.html"
<security:csrf disabled="true"/>
 />

login-page:指定登錄頁(yè)面
login-processing-url:指定登錄數(shù)據(jù)提交的uri,即相當(dāng)于是提交驗(yàn)證的uri
default-target-url:登陸成功后跳轉(zhuǎn)的頁(yè)面
authentication-failure-url:登錄失敗后跳轉(zhuǎn)的頁(yè)面
always-use-default-target:讓用戶默認(rèn)先跳轉(zhuǎn)到target-url碘梢,如果沒(méi)有登錄便會(huì)強(qiáng)制跳轉(zhuǎn)回登錄頁(yè)面咬摇。
parameter元素:指定登錄時(shí)的用戶名和密碼所對(duì)應(yīng)的對(duì)象名稱。
關(guān)于csrf 這玩意我玩不轉(zhuǎn) 所以直接禁用了煞躬。不禁用的話登錄時(shí)會(huì)多加一步csrf驗(yàn)證肛鹏。

在配置完<security:http>標(biāo)簽后逸邦,我們?nèi)绻苯舆\(yùn)行,則會(huì)發(fā)現(xiàn)頁(yè)面在無(wú)限地被轉(zhuǎn)發(fā)在扰。因?yàn)槲覀冏远x了登錄頁(yè)面缕减,而SpringSecurity又會(huì)將我們自定義的頁(yè)面進(jìn)行攔截跳轉(zhuǎn),所以而到了登錄頁(yè)面又會(huì)被繼續(xù)攔截跳轉(zhuǎn)健田,陷入一個(gè)死循環(huán)中烛卧。所以我們需要通知框架 這個(gè)頁(yè)面不需要被攔截佛纫。
在配置文件中加入:

    <security:http pattern="/html/myLogin.html" security="none"/>
    <security:http pattern="/html/login_failure.html" security="none"/>

即完整的配置文件應(yīng)該是:


<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:security="http://www.springframework.org/schema/security"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
        http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
        http://www.springframework.org/schema/security
        http://www.springframework.org/schema/security/spring-security.xsd">

    <security:http pattern="/html/myLogin.html" security="none"/>
    <security:http pattern="/html/login_failure.html" security="none"/>

    <security:http pattern="/**" auto-config="true">
        <security:intercept-url pattern="/**" access="hasRole('ROLE_USER')"/>
        <security:form-login login-page="/html/myLogin.html"
                             login-processing-url="/myLogin"
                             always-use-default-target="true"
                             username-parameter="name" password-parameter="password"
                             default-target-url="/html/home.html"
                             authentication-failure-forward-url="/html/login_failure.html" />
        <security:csrf disabled="true"/>
    </security:http>

    <security:authentication-manager>
        <security:authentication-provider>
            <security:user-service>
                <security:user name="myName" authorities="ROLE_USER" password="123456"/>
            </security:user-service>
        </security:authentication-provider>
    </security:authentication-manager>


</beans>

登錄的html

這里的話主要通過(guò)一個(gè)表單提交

<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>用戶</title>
</head>
<script type="text/javascript" src="/js/jquery.min.js"></script>
<body>
<div>
    <form name='f'
          action='/myLogin'
          method='GET'>
        <table class="formtable">
            <tr>
                <td class="title">輸入姓名:</td>
                <td><input  class="control" type='text' name='name' id="name"></td>
            </tr>
            <tr>
                <td class="title">輸入密碼:</td>
                <td><input class="control" type='password' name='password' id="password"/></td>
            </tr>
            <tr>
                <td colspan='2'><input name="submit" type="submit"
                                       value="登錄" /></td>
            </tr>
        </table>
    </form>
</div>
</body>
</html>

這樣直接運(yùn)行就可以看到我們自定義的登錄頁(yè)面了

Paste_Image.png
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末妓局,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子呈宇,更是在濱河造成了極大的恐慌好爬,老刑警劉巖,帶你破解...
    沈念sama閱讀 211,376評(píng)論 6 491
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件甥啄,死亡現(xiàn)場(chǎng)離奇詭異存炮,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)蜈漓,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,126評(píng)論 2 385
  • 文/潘曉璐 我一進(jìn)店門(mén)穆桂,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人融虽,你說(shuō)我怎么就攤上這事享完。” “怎么了有额?”我有些...
    開(kāi)封第一講書(shū)人閱讀 156,966評(píng)論 0 347
  • 文/不壞的土叔 我叫張陵般又,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我巍佑,道長(zhǎng)茴迁,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 56,432評(píng)論 1 283
  • 正文 為了忘掉前任萤衰,我火速辦了婚禮堕义,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘脆栋。我一直安慰自己倦卖,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,519評(píng)論 6 385
  • 文/花漫 我一把揭開(kāi)白布筹吐。 她就那樣靜靜地躺著糖耸,像睡著了一般。 火紅的嫁衣襯著肌膚如雪丘薛。 梳的紋絲不亂的頭發(fā)上嘉竟,一...
    開(kāi)封第一講書(shū)人閱讀 49,792評(píng)論 1 290
  • 那天,我揣著相機(jī)與錄音,去河邊找鬼舍扰。 笑死倦蚪,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的边苹。 我是一名探鬼主播陵且,決...
    沈念sama閱讀 38,933評(píng)論 3 406
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼个束!你這毒婦竟也來(lái)了慕购?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 37,701評(píng)論 0 266
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤茬底,失蹤者是張志新(化名)和其女友劉穎沪悲,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體阱表,經(jīng)...
    沈念sama閱讀 44,143評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡殿如,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,488評(píng)論 2 327
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了最爬。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片涉馁。...
    茶點(diǎn)故事閱讀 38,626評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖爱致,靈堂內(nèi)的尸體忽然破棺而出烤送,到底是詐尸還是另有隱情,我是刑警寧澤蒜鸡,帶...
    沈念sama閱讀 34,292評(píng)論 4 329
  • 正文 年R本政府宣布胯努,位于F島的核電站,受9級(jí)特大地震影響逢防,放射性物質(zhì)發(fā)生泄漏叶沛。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,896評(píng)論 3 313
  • 文/蒙蒙 一忘朝、第九天 我趴在偏房一處隱蔽的房頂上張望灰署。 院中可真熱鬧,春花似錦局嘁、人聲如沸溉箕。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,742評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)肴茄。三九已至,卻和暖如春但指,著一層夾襖步出監(jiān)牢的瞬間寡痰,已是汗流浹背抗楔。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 31,977評(píng)論 1 265
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留拦坠,地道東北人连躏。 一個(gè)月前我還...
    沈念sama閱讀 46,324評(píng)論 2 360
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像贞滨,于是被迫代替她去往敵國(guó)和親入热。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,494評(píng)論 2 348

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

  • Android 自定義View的各種姿勢(shì)1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 171,760評(píng)論 25 707
  • Spring Cloud為開(kāi)發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見(jiàn)模式的工具(例如配置管理晓铆,服務(wù)發(fā)現(xiàn)勺良,斷路器,智...
    卡卡羅2017閱讀 134,629評(píng)論 18 139
  • 發(fā)現(xiàn) 關(guān)注 消息 iOS 第三方庫(kù)尤蒿、插件郑气、知名博客總結(jié) 作者大灰狼的小綿羊哥哥關(guān)注 2017.06.26 09:4...
    肇東周閱讀 12,059評(píng)論 4 62
  • 大二了,真的大二了腰池,我也是學(xué)長(zhǎng)了!剛上大學(xué)時(shí)特別羨慕學(xué)長(zhǎng)這樣一個(gè)稱號(hào)忙芒,覺(jué)得學(xué)長(zhǎng)會(huì)懂很多很多示弓,都是很牛的存在。曾經(jīng)還...
    瑪法之夢(mèng)閱讀 507評(píng)論 8 2