Spring Security命名空間配置總結(jié)

命名空間的配置包含如下幾個部分

  1. Web/HTTP安全:設(shè)置過濾器和一些用于框架驗(yàn)證機(jī)制的服務(wù)Bean。
  2. 業(yè)務(wù)對象的保護(hù) : 用于security服務(wù)層劲弦。
  3. AuthenticationManager : 權(quán)限管理器尸饺。處理從框架其他部分發(fā)來的權(quán)限請求君编。
  4. AccessDecisionManager:認(rèn)證管理器 拆火。 provides access decisions for web and method security歧譬。 系統(tǒng)會注冊一個默認(rèn)的認(rèn)證管理器循未。
  5. AuthenticationProviders
  6. UserDetailsService

使用命名空間(WEB)

1. web.xml中添加過濾器
<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>

用戶定義beans的時候不能將其命名為springSecurityFilterChain陷猫。

2. 最精簡的<http>配置
<http>
    <intercept-url pattern="/**" access="hasRole('USER')" />
    <form-login />
    <logout />
</http>
  • 應(yīng)用中所有的url都收到保護(hù),需要ROLE_USER這個角色才能訪問的妖。
  • 用戶使用表單進(jìn)行登錄绣檬,需要設(shè)計一個登出頁面。
  • <intercept-url>
    pattern:訪問路徑
    access:訪問需求
  • 可以使用多個<intercept-url>進(jìn)行配置嫂粟,但是系統(tǒng)會默認(rèn)使用第一個匹配的需求娇未,所以需要把最特殊匹配的放在最前面。

下面我們添加用戶

<authentication-manager>
    <authentication-provider>
        <user-service>
          <user name="jimi" password="jimispassword" authorities="ROLE_USER, ROLE_ADMIN" />
           <user name="bob" password="bobspassword" authorities="ROLE_USER" />
        </user-service>
    </authentication-provider>
</authentication-manager>
  • <http>元素負(fù)責(zé)創(chuàng)建FilterChainProxy和他所使用的過濾器beans星虹。
  • <authentication-manager>元素創(chuàng)建DaoAuthenticationProvider bean零抬。
  • <user-service>元素創(chuàng)建InMemoryDaoImpl镊讼。
  • 所有的<authentication-provider>元素必須是 <authentication-manager>的子元素, <authentication-manager>創(chuàng)建了一個ProviderManager并且為他注冊authentication providers平夜。
3. Form和基本的登錄選項(xiàng)
<http>
    <intercept-url pattern="/login.jsp*" access="IS_AUTHENTICATED_ANONYMOUSLY"/>
    <intercept-url pattern="/**" access="ROLE_USER" />
    <form-login login-page='/login.jsp' />
</http>

所有匿名用戶都可以進(jìn)入登錄頁面狠毯,其他頁面只有USER角色可以進(jìn)入。 AuthenticatedVoter-->查看此類源碼

** 可以用以下代碼來完全繞開security過濾器**

<http pattern="/css/**" security="none"/>
<http pattern="/login.jsp*" security="none"/>
<http use-expressions="false">
    <intercept-url pattern="/**" access="ROLE_USER" />
    <form-login login-page='/login.jsp' />
</http>

如果<http>元素省略了pattern屬性褥芒,那么他將對所有請求有效嚼松。
如果在<http>中設(shè)置路徑來繞開security過濾器,那么這些路徑中的內(nèi)容不能再訪問當(dāng)前用戶信息或者安全方法锰扶,如果還想在這些路徑中訪問献酗,那么可以考慮放棄將security="none",改為采用access='IS_AUTHENTICATED_ANONYMOUSLY'坷牛。

如果要使用基本用戶驗(yàn)證來代替表單驗(yàn)證罕偎,可以使用如下配置

<http use-expressions="false">
    <intercept-url pattern="/**" access="ROLE_USER" />
    <http-basic />
</http>

** 設(shè)置默認(rèn)登錄Post的目標(biāo)**

<http pattern="/login.htm*" security="none"/>
<http use-expressions="false">
    <intercept-url pattern='/**' access='ROLE_USER' />
    <form-login login-page='/login.htm' default-target-url='/home.htm' always-use-default-target='true' />
</http>
  • 如果登陸界面并不是因?yàn)橛脩粢L問受保護(hù)資源而跳轉(zhuǎn)過來的,那么用戶登錄成功后將進(jìn)入default-target-url京闰。
  • 如果強(qiáng)制用戶登錄成功后進(jìn)入default-target-url颜及,那么可以設(shè)置always-use-default-target='true'
  • 如果要特別細(xì)地配置登錄成功后進(jìn)入的目標(biāo)可以通過設(shè)置 authentication-success-handlerref屬性來代替 default-target-url,這個屬性是類AuthenticationSuccessHandler的實(shí)例蹂楣。

** 登出配置**

系統(tǒng)默認(rèn)的登出鏈接是 /logout俏站,如果想在用戶登出時選擇其他路徑可以使用logout-url屬性。

** 使用其他 Authentication Providers**

用戶自定義UserDetailsService痊土,然后實(shí)例化為 myUserDetailsService肄扎。

<authentication-manager>
    <authentication-provider user-service-ref='myUserDetailsService' />
</authentication-manager>

如果要使用數(shù)據(jù)庫進(jìn)行驗(yàn)證:

<authentication-manager>
    <authentication-provider>
        <jdbc-user-service data-source-ref="securityDataSource"/>
    </authentication-provider>
</authentication-manager>

securityDataSource是DataSource bean的實(shí)例化名字,DataSource用來管理Spring Security的標(biāo)準(zhǔn)用戶數(shù)據(jù)表赁酝。
我們也可以配置一個JdbcDaoImpl犯祠,然后用user-service-ref屬性來引入:

<authentication-manager>
    <authentication-provider user-service-ref='myUserDetailsService' />
</authentication-manager>
<beans:bean id="myUserDetailsService" class="org.springframework.security.core.userdetails.jdbc.JdbcDaoImpl">
    <beans:property name="dataSource" ref="dataSource"/>
</beans:bean>

也可以使用標(biāo)準(zhǔn)的AuthenticationProvider:

<authentication-manager>
    <authentication-provider ref='myAuthenticationProvider' />
</authentication-manager>

myAuthenticationProvider為用戶的一個bean的名字,這個bean需要實(shí)現(xiàn) AuthenticationProvider接口

** 添加密碼編碼**

<beans:bean name="bcryptEncoder" class="org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder"/>
<authentication-manager>
    <authentication-provider>
        <password-encoder ref="bcryptEncoder"/>
        <user-service>
            <user name="jimi" password="d7e6351eaa13189a5a3641bab846c8e8c69ba39f" authorities="ROLE_USER, ROLE_ADMIN" />
            <user name="bob" password="4e7421b1b8765d8f9406d87e7cc6aa784c4ab97f" authorities="ROLE_USER" />
        </user-service>
    </authentication-provider>
</authentication-manager>
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末酌呆,一起剝皮案震驚了整個濱河市衡载,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌隙袁,老刑警劉巖痰娱,帶你破解...
    沈念sama閱讀 222,681評論 6 517
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異藤乙,居然都是意外死亡猜揪,警方通過查閱死者的電腦和手機(jī)惭墓,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 95,205評論 3 399
  • 文/潘曉璐 我一進(jìn)店門坛梁,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人腊凶,你說我怎么就攤上這事划咐∷┠睿” “怎么了?”我有些...
    開封第一講書人閱讀 169,421評論 0 362
  • 文/不壞的土叔 我叫張陵褐缠,是天一觀的道長政鼠。 經(jīng)常有香客問我,道長队魏,這世上最難降的妖魔是什么公般? 我笑而不...
    開封第一講書人閱讀 60,114評論 1 300
  • 正文 為了忘掉前任,我火速辦了婚禮胡桨,結(jié)果婚禮上官帘,老公的妹妹穿的比我還像新娘。我一直安慰自己昧谊,他們只是感情好刽虹,可當(dāng)我...
    茶點(diǎn)故事閱讀 69,116評論 6 398
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著呢诬,像睡著了一般涌哲。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上尚镰,一...
    開封第一講書人閱讀 52,713評論 1 312
  • 那天阀圾,我揣著相機(jī)與錄音,去河邊找鬼狗唉。 笑死稍刀,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的敞曹。 我是一名探鬼主播账月,決...
    沈念sama閱讀 41,170評論 3 422
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼澳迫!你這毒婦竟也來了局齿?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 40,116評論 0 277
  • 序言:老撾萬榮一對情侶失蹤橄登,失蹤者是張志新(化名)和其女友劉穎抓歼,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體拢锹,經(jīng)...
    沈念sama閱讀 46,651評論 1 320
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡谣妻,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,714評論 3 342
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了卒稳。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片蹋半。...
    茶點(diǎn)故事閱讀 40,865評論 1 353
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖充坑,靈堂內(nèi)的尸體忽然破棺而出减江,到底是詐尸還是另有隱情染突,我是刑警寧澤,帶...
    沈念sama閱讀 36,527評論 5 351
  • 正文 年R本政府宣布辈灼,位于F島的核電站份企,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏巡莹。R本人自食惡果不足惜司志,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 42,211評論 3 336
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望降宅。 院中可真熱鬧俐芯,春花似錦、人聲如沸钉鸯。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,699評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽唠雕。三九已至贸营,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間岩睁,已是汗流浹背钞脂。 一陣腳步聲響...
    開封第一講書人閱讀 33,814評論 1 274
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留捕儒,地道東北人冰啃。 一個月前我還...
    沈念sama閱讀 49,299評論 3 379
  • 正文 我出身青樓,卻偏偏與公主長得像刘莹,于是被迫代替她去往敵國和親阎毅。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,870評論 2 361

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