spring security 初次涉獵三

今天我們就來學習spring security 的配置文件applicationContext-security.xml文件

----------------------3小時完成-----------------------------------

要做的事:學會在web.xml文件中配置,學會applicationContext-security.xml文件配置

1、掌握配置文件運行原理。

2、學會在web.xml文件中配置spring security文件。

3、學會applicationContext-security.xml文件中的配置標籤。

-------------------------------------------------------------------------

第一步,掌握配置文件運行原理。要知道配置文件是幹什麼用的,什麼時候被用到。在java框架中的配置文件,是初始化數據使用的。是在程序一開始就被用到。配置文件web.xml是被tomcat容器加載的,而tomcat就相當於一個代理類。applicationContext-security.xml是通過web.xml作爲入口初始化spring security的入口的。

第二步,學會在web.xml文件中配置spring security文件。這個配置文件就是applicationContext-security.xml。

首先,在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>

注意filter-name一定要寫成springSecurityFilterChain。在DelegatingFilterProxy類init時,會獲取filter-name,然後通過filter-name去spring中獲取代理的bean。DelegatingFilterProxy是代理授權過濾器。而spring-security的配置是由HttpSecurityBeanDefinitionParser解析器解析,每一個http都會被解析成一個SecurityFilterChain都添加到FilterChainProxy中的filterChains中。而且該FilterChainProxy會以springSecurityFilterChain註冊得到spring的bean中。

    <http realm="Contacts Realm">
        <intercept-url pattern="/" access="IS_AUTHENTICATED_ANONYMOUSLY"/>
        <intercept-url pattern="/index.jsp" access="IS_AUTHENTICATED_ANONYMOUSLY"/>
        <intercept-url pattern="/hello.htm" access="IS_AUTHENTICATED_ANONYMOUSLY"/>
        <intercept-url pattern="/login.jsp*" access="IS_AUTHENTICATED_ANONYMOUSLY"/>
        <intercept-url pattern="/switchuser.jsp" access="ROLE_SUPERVISOR"/>
        <intercept-url pattern="/j_spring_security_switch_user" access="ROLE_SUPERVISOR"/>
        <intercept-url pattern="/**" access="ROLE_USER"/>


        <form-login login-page="/login.jsp" authentication-failure-url="/login.jsp?login_error=1"/>
        <http-basic/>
        <logout logout-success-url="/index.jsp"/>
        <remember-me />
        <custom-filter ref="switchUserProcessingFilter" position="SWITCH_USER_FILTER"/>
    </http>

說明:

access後接用戶角色,IS_AUTHENTICATED_ANONYMOUSLY代表匿名登錄,ROLE_USER代表普通用戶,ROLE_SUPERVISOR代表超級管理員。

程序在啓動的時候會遍歷解析spring-security配置文件,當命名空間是<http>的時候就使用HttpSecurityBeanDefinitionParser類來解析。

<!-- 靜態資源,不用權限 -->  

<httppattern="/resources/**"security="none"/>  

<httppattern="/verify/**"security="none"/>  

<httppattern="/user/login.htm"security="none"/>  

<httppattern="/user/register.*"security="none"/>  

<httppattern="/favicon.ico"security="none"/>

當發現security="none"的時候,則創建一個DefaultFilterChain添加到FilterChainProxy的filterChains屬性中。

----------------------------------------------------------------------------------------------------------------------------

最小<http>配置

只需要進行如下配置就可以配置成一個安全配置

<http auto-config='true'>

<intercept-url pattern="/**"  access="ROLE_USER" />

</http>

這表示,我們要保護應用程序中的所有URL,只有擁有ROLE_USER角色的用戶才能訪問。

<http auto-config='true'>這一句其實是一些配置的縮寫:

<http>

<intercept-url pattern="/**" access="ROLE_USER" />

<form-login  />

<anonymous  />

<http-basic  />

<logout  />

<remember-me  />

</http>

這些元素分別與form-login,匿名認證,註銷處理和remember-me對應。

auto-config需要一個UserDetailsService

使用auto-config的時候如果沒有配置UserDetailsService就會出現錯誤。這是因爲remember-me服務在auto-config="true"的時候啓動了,它的認證機制需要UserDetailsService來實現。

如果碰到報沒有定義UserDetailsService造成的問題,試着去掉auto-config配置。






下邊這些是標籤屬性說明: 
配置說明: 
  lowercase-comparisons:表示URL比較前先轉爲小寫。 
  path-type:表示使用Apache Ant的匹配模式。 
  access-denied-page:訪問拒絕時轉向的頁面。 
  access-decision-manager-ref:指定了自定義的訪問策略管理器。當系統角色名的前綴不是默認的ROLE_時,需要自定義訪問策略管理器。 
  login-page:指定登錄頁面。 
  login-processing-url:指定了客戶在登錄頁面中按下 Sign In 按鈕時要訪問的 URL。與登錄頁面form的action一致。其默認值爲:/j_spring_security_check。 
  authentication-failure-url:指定了身份驗證失敗時跳轉到的頁面。 
  default-target-url:指定了成功進行身份驗證和授權後默認呈現給用戶的頁面。 
  always-use-default-target:指定了是否在身份驗證通過後總是跳轉到default-target-url屬性指定的URL。 
  logout-url:指定了用於響應退出系統請求的URL。其默認值爲:/j_spring_security_logout。 
  logout-success-url:退出系統後轉向的URL。 
  invalidate-session:指定在退出系統時是否要銷燬Session。 
  max-sessions:允許用戶帳號登錄的次數。範例限制用戶只能登錄一次。 
  exception-if-maximum-exceeded: 默認爲false,此值表示:用戶第二次登錄時,前一次的登錄信息都被清空。 
  當exception-if-maximum-exceeded="true"時系統會拒絕第二次登錄。


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章