18 3月 2011

Spring Security (1) Basic Configuration

一個對外的系統通常有權限設定,主要的需求通常就是兩個

  • 判斷目前的操作人員是誰
  • 人員是否可以進行這個操作

Spring Security提供了一個快速而有彈性的方法可以處理上述兩個需求,當然,有彈性通常也代表較多的設定與較複雜的設計....

我們先假設一個基本的網頁系統權限需求,除index.jsp外,其他的頁面存取都必需要是登入後才能看到,但/admin.jsp則必需是具有admin角色的人員才能看到。

web.xml

第一步當然是載入Spring的設定檔....
<context-param>
    <param-name>contextConfigLocation</param-name>
    <param-value>classpath*:applicationContext.xml</param-value>
</context-param>
<listener>
    <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
再來就是利用Spring的filter來檢查url及使用者,設定welcome file主要是讓url為"/"的request直接送到index.jsp
<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>
<welcome-file-list>
    <welcome-file>index.html</welcome-file>
    <welcome-file>index.jsp</welcome-file>
</welcome-file-list>

接下來就是spring security的設定了,先用最基本的方式,由Spring提供登入的頁面,我們只要提供哪些url需要被檢查,登入的帳號密碼資料即可。

<http auto-config='true'>
    <intercept-url pattern="/" filters="none" />
    <intercept-url pattern="/admin.jsp" access="ROLE_ADMIN" />
    <intercept-url pattern="/**" access="ROLE_USER" />
</http>
<authentication-manager>
    <authentication-provider>
        <user-service>
            <user name="admin" password="admin" authorities="ROLE_USER, ROLE_ADMIN" />
            <user name="user" password="user" authorities="ROLE_USER" />
        </user-service>
    </authentication-provider>
</authentication-manager>
<http>的<intercept-url>指出哪些url需要被檢查,像"/admin.jsp"就要是具有"ROLE_ADMIN"角色的人才能進人,而除了“/“之外的資源全部需要登入後才能使用。
<user-service>則是提供了帳密及角色的資料。

接下來在browser上試著要進入系統,你會發現除了"/"之外,都會跳出一個登入頁面 Spring Login
可以試著用admin或user的帳號進入。  

這就是最基本的Spring Security 體驗....

沒有留言: