初學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這個就是入口咯,接下
來就該從它入手了。不過要等等。。。。。。。。。。