天天看點

有關Spring Security 的配置

 初學spring security的人如我之水準者,看見它的配置方式,腦袋上面會冒出一個大大的問号,配是配好了,但這之後的原理是什麼呢,為什麼要這麼配置呢,它預設的登入頁面怎麼出來的?j_spring_security_check這個url又是在哪定義的?帶着這些疑問,下了它的源代碼和參考文檔 ,但文檔隻是教你怎麼用,并沒講為什麼這麼用,源碼是有一大堆,類名又都差不多一個樣,研究這些感覺還是無從下手。索性想從它的配置檔案開始。spring security即以前的acegi是在是spring 2.0之後改進的版本,其中很大的一個改進就是配置的簡化,之前也看了acegi的配置,那是相當的長而且難看懂。可能Rod Johnson也看不慣了,改進了些吧,但還是有些麻煩:

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:security="http://www.springframework.org/schema/security"
       xsi:schemaLocation="
       http://www.springframework.org/schema/beans http://www.springframework.org      
/schema/beans/spring-beans-2.5.xsd
       http://www.springframework.org/schema/security http://www.springframework.      
org/schema/security/spring-security-2.0.xsd">
    <security:http auto-config="true">
        <security:intercept-url pattern="index.html" filters="none"/>
        <security:intercept-url pattern="*.swf" filters="none"/>
        <security:intercept-url pattern="*.html" access="ROLE_USER"/>
    </security:http>
    <security:authentication-provider>
        <security:user-service>
            <security:user name="admin" password="admin" authorities="ROLE_USER,       
ROLE_ADMIN"/>
            <security:user name="user" password="user" authorities="ROLE_USER"/>
        </security:user-service>
    </security:authentication-provider>
</beans>
以上是個簡單的配置示例,想要使用稍複雜的資料庫驗證,加密,方法授權等等等都還要另外配置。更複雜      
的openid,ldap的支援等等等那更有複雜的配置等着。這些暫不管,我隻管能搞懂基本就ok了,呵呵。      
廢話了半天,開始進入正題,高手肯定早就發現了,它能夠如此将以前acegi動不動上百行的配置寫得如此      
簡短,主要是因為它使用了從spring2.0開始才支援的命名空間這一利器。查了spring的reference,      
發現在附錄部分講了這方面的内容。詳細情查spring參考手冊附錄之 Extensible XML authoring 。      
粗略的看了看,大緻就是說,為了支援自定義的命名空間這一配置檔案須在META-INF目錄下面的      
spring.handlers檔案裡面指定一個繼承了NamespaceHandlerSupport的類。比方說:http/:      
//www.mycompany.com/schema/myns=org.springframework.samples.xml.MyNamespaceHandler      
再去spring-security-core-xx.jar裡面看(可用winrar打開),果真有這個檔案輕按兩下打開就一行:      
http/://www.springframework.org/schema/security=org.springframework.security.      
config.SecurityNamespaceHandler顯而易見SecurityNamespaceHandler這個就是入口咯,接下      
來就該從它入手了。不過要等等。。。。。。。。。。      

繼續閱讀