參考文獻:
http://sucre.blog.51cto.com/1084905/683624
1.安裝部署CAS Server
從官網下載CAS Server,今天發現CAS Server的官網居然被牆掉了,感嘆天朝的神奇之處。后來從同事那里拷貝到了cas-server-3.5.2-release.zip。我將其發布到百度雲盤上面:http://pan.baidu.com/s/1kUfzh
解壓縮這個ZIP包以后,到路徑\cas-server-3.5.2-release\cas-server-3.5.2\modules下拷貝cas-server-webapp-3.5.2.war這個war包至tomcat的webapps目錄下。為了登錄方便,我們將cas-server-webapp-3.5.2.war重命名為cas.war,啟動tomcat以后會自動解壓縮這個war,在webapps目錄下生一個一個cas目錄。
2.驗證CAS Server安裝成功
啟動tomcat,訪問https://localhost:8443/cas,如果能夠出現以下界面就表示CAS Server部署成功。
雖然 CAS Server 已經部署成功,但這只是一個缺省的實現,在默認的server界面,只要輸入用戶名和密碼相同,就可以登錄,比如我們都輸入aaa,然后點擊登陸。
3.擴展認證接口(JDBC)
當然,在實際使用的時候,這樣做肯定是不行的,還需要根據實際概況做擴展和定制,最主要的是擴展認證 (Authentication) 接口和 CAS Server 的界面。我們通常都會使用jdbc連接數據庫進行認證,這種情況,用戶名和密碼被保存在數據庫的某個表中。需要進行如下配置。
在MySQL數據庫下創建一個叫做CAS的數據,然后在該數據庫中創建一張app_user表,然后在這張表中插入數據,創建表和插入記錄的sql腳本如下:
CREATE TABLE `app_user` ( `username` varchar(30) NOT NULL default '', `password` varchar(45) NOT NULL default '', PRIMARY KEY (`username`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8; --並添加如下用戶: INSERT INTO `app_user` (`username`,`password`) VALUES ('test','111'), ('user','222'), ('tom','333'), ('jim','000');
用編輯器打開%CATALINA_HOME%/webapps/cas/WEBINF/deployerConfigContext.xml,找到
<bean class="org.jasig.cas.authentication.handler.support.SimpleTestUsernamePasswordAuthenticationHandler" />
將其注釋掉,然后在同一級別下面添加一個bean,其內容如下所示:
<!-- <bean class="org.jasig.cas.authentication.handler.support.SimpleTestUsernamePasswordAuthenticationHandler" /> --> <bean class="org.jasig.cas.adaptors.jdbc.QueryDatabaseAuthenticationHandler"> <property name="sql" value="select password from app_user where username=?" /> <property name="dataSource" ref="dataSource" /> </bean>
然后在添加一個bean,這個bean是跟authenticationManager同一級別的,注意這個很重要,這個bean不是跟之前那個bean class同級。其內容如下:
<bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource" > <property name="driverClassName"><value>com.mysql.jdbc.Driver</value></property> <property name="url"><value>jdbc:mysql://localhost:3306/cas</value></property> <property name="username"><value>root</value></property> <property name="password"><value>root</value></property> </bean>
如果不想單獨再創建一個bean id的話,可以通過通過如下配置完成,並且這個bean使用了密碼校驗,可以從數據表user中查詢用戶密碼,並對密碼進行MD5加密校驗,這個認證器位於cas-server-support-jdbc包中。
<bean class="org.jasig.cas.adaptors.jdbc.QueryDatabaseAuthenticationHandler"> <property name="dataSource"> <bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource"> <property name="driverClassName" value="com.mysql.jdbc.Driver" /> <property name="url" value="jdbc:mysql://localhost:3306/cas?useUnicode=true&characterEncoding=utf-8" /> <property name="username" value="root" /> <property name="password" value="root" /> </bean> </property> <property name="sql" value="select password from app_user where username=?" /> <property name="passwordEncoder"> <bean class="org.jasig.cas.authentication.handler.DefaultPasswordEncoder"> <constructor-arg value="MD5" /> </bean> </property> </bean>
然后從\cas-server-3.5.2-release\cas-server-3.5.2\modules目錄下拷貝cas-server-support-jdbc-3.5.2.jar,再下載mysql-connector-java-5.1.26-bin.jar,將這兩個文件拷貝到%CATALINA_HOME%/webapps/cas/WEB-INF/lib目錄下。
此時在登錄https://localhost:8443/cas,然后使用jim/000,test/111,tom/333,user/222,test/test,test/1234,可以發現,前面四組是可以通過驗證的,而后面兩組驗證失敗。通過驗證以后,再次登陸https://localhost:8443/cas,會提示已經登錄,此時如果要注銷,可以在輸入:https://localhost:8443/cas/logout。
在配置文件中可以看到,這里的認證器配置的是一個list,默認情況下,只要有一個認證器通過認證,就認為是合法的用戶,建議選擇合適的認證器放在最前面。比如說,如果不注釋之前的SimpleTestUsernamePasswordAuthenticationHandler這個認證器。