1 安裝
1.1系統(tǒng)配置
以下的軟件環(huán)境是必需的:
1. JDK 1.4.2 or higher
2. Tomcat 5.X

1.2 Tomcat 配置,啟用SSL
1. 在要安裝CAS的機(jī)器上為Tomcat生成用于SSL通訊的密鑰:

keytool –genkey –alias tomcat –keyalg RSA
這時(shí)需要輸入密鑰密碼和其他參數(shù)(第一個(gè)參數(shù)CN必須設(shè)置為CAS機(jī)器名,本機(jī)使用localhost測試),會(huì)在用戶目錄中生成.keystore密鑰文件。

2. 導(dǎo)出密鑰文件:

keytool –export –file server.crt –alias tomcat
這時(shí)需要輸入上一步設(shè)定的密碼,結(jié)果會(huì)在當(dāng)前目錄生成server.crt信任狀。

3. 為客戶端的JVM導(dǎo)入密鑰:

keytool –import –keystore $JAVA_HOME\jre\lib\security\cacerts
–file server.crt –alias tomcat
輸入密碼時(shí)注意密碼為“changeit”。
4. 修改服務(wù)端Tomcat配置文件,啟用SSL。修改$CATALINA_HOME\conf\server.xml,去掉有關(guān)SSL的那一段的注釋,需要在connector字段中加入keystorePass="password"(password即為1、2步中的密碼),keystoreFile= "keystorePath"(可以把第一步生成的.keystore復(fù)制到$CATALINA_HOME\conf下,這樣keystoreFile= "conf/.keystore")。

5. 重啟Tomcat,測試https://server:8443是否可以訪問(server應(yīng)換為機(jī)器名或IP地址)。

1.3 CAS Server安裝

下載CAS Server 3.0.4,將其中的cas.war復(fù)制到$CATALINA_HOME\webapps下,當(dāng)然現(xiàn)在CAS中的用戶密碼認(rèn)證Handler是很簡陋的,產(chǎn)品化必須重寫這部分代碼,生成新的cas.jar。這時(shí)可以通過訪問https://localhost:8443/cas測試CAS是否成功部署,應(yīng)看到CAS登陸界面。

1.4 CAS Client 部署

利用Tomcat自帶的servlets-examples ($CATALINA_HOME\webapps\servlets-examples)和jsp-examples($CATALINA_HOME\ webapps\jsp-examples)進(jìn)行試驗(yàn),下載最新版本的Java CAS Client,將casclient.jar復(fù)制到這兩個(gè)項(xiàng)目的WEB-INF目錄的lib下(需要新建此目錄)。修改兩個(gè)項(xiàng)目的WEB-INF\ web.xml,添加如下的過濾器:

<!-- CAS Filters -->
??? <filter>
??????? <filter-name>CASFilter</filter-name>
??????? <filter-class>edu.yale.its.tp.cas.client.filter.CASFilter</filter-class>
??????? <init-param>
??????????? <param-name>edu.yale.its.tp.cas.client.filter.loginUrl</param-name>
??????????? <param-value>https://server:8443/cas/login</param-value>
??????? </init-param><!--這里的server是服務(wù)端的IP-->
??????? <init-param>
??????????? <param-name>edu.yale.its.tp.cas.client.filter.validateUrl</param-name>
??????????? <param-value>https://serName:8443/cas/proxyValidate</param-value>
??????? </init-param><!--這里的serName是服務(wù)端的主機(jī)名,而且必須是-->
??????? <init-param>
????????? <param-name>edu.yale.its.tp.cas.client.filter.serverName</param-name>
????????? <param-value>client:port</param-value><!--client:port就是需要CAS需要攔截的地址和端口,一般就是這個(gè)TOMCAT所啟動(dòng)的IP和port-->
??????? </init-param>
??? </filter>
???
??? <filter-mapping>
??????? <filter-name>CASFilter</filter-name>
??????? <url-pattern>/servlet/*</url-pattern><!--這里的設(shè)置是針對servlets-examples的,針對jsp-examples設(shè)置為/*-->
??? </filter-mapping>

2 測試
重啟Tomcat,定位到servlets-examples,執(zhí)行任何一個(gè)例子都會(huì)被重定向到CAS登陸頁;再定位到j(luò)sp-examples,也會(huì)被重定向到CAS登陸頁;此時(shí)登陸(默認(rèn)的認(rèn)證Handler只要求username=password,可任意選擇用戶名);登錄后就會(huì)進(jìn)入jsp- examples;繼續(xù)定位到servlets-examples,執(zhí)行任何一個(gè)例子也不用再輸入密碼。


補(bǔ)充:

&#61548; 在多臺(tái)機(jī)器上部署CAS:這些機(jī)器必需在同一個(gè)域中;服務(wù)器端生成證書,客戶端導(dǎo)入證書(操作見上)。

&#61548; PHP客戶端:使用esup-phpcas客戶端,驗(yàn)證部分php代碼如下:
// import phpCAS lib
include_once('CAS/CAS.php');
// initialize phpCAS
phpCAS::client(CAS_VERSION_2_0,'freeserver.test-toodou.com',8443,'/cas');
// force CAS authentication
phpCAS::forceAuthentication();
// at this step, the user has been authenticated by the CAS server
// and the user's login name can be read with phpCAS::getUser().

// logout if desired
if (isset($_REQUEST['logout'])) {
phpCAS::logout();
}
登錄結(jié)束后,CAS服務(wù)器會(huì)自動(dòng)重定向回本頁面。

&#61548; CAS服務(wù)器與數(shù)據(jù)庫連接:實(shí)際環(huán)境中我們需要到數(shù)據(jù)庫驗(yàn)證用戶有效性,在CAS中配置JDBC連接。

首先,我們需要?jiǎng)?chuàng)建自己的數(shù)據(jù)庫驗(yàn)證器,當(dāng)然也可以使用Jasig提供的cas-server-jdbc.jar,這里我們修改了cas-server- jdbc的源碼滿足自己的需要。并把mysql的jdbc驅(qū)動(dòng)和修改后的jar部署到CAS%/WEB_INF/lib/。

修改 %CAS%/WEB_INF/deployerConfigContext..xml,其中關(guān)于驗(yàn)證器的一段如下:
………………………………..
<bean class="org.jasig.cas.adaptors.jdbc.QueryDatabaseAuthenticationHandler">
??????????????????????????? <property name="sql" value="select psw from user where username=?" />
??????????????????????????? <property name="dataSource" ref="dataSource" />
??????????????????????? </bean>
??????????????????? </list>
??????????????? </property>
??????? </bean>

??????? <bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource" destroy-method="close">
??????????????? <property name="driverClassName"><value>com.mysql.jdbc.Driver</value></property>
??????????????? <property name="url"><value>jdbc:mysql://192.168.1.246:3306/toodou</value></property>
??????????????? <property name="username"><value>username</value></property>
??????????????? <property name="password"><value>********</value></property>
??????? </bean>
&#61548; Jmeter測試:根據(jù)目前土豆網(wǎng)的登錄流量,我們使用Jmeter對CAS處理性能進(jìn)行測試,以每分鐘20人次登錄計(jì),得到平均處理時(shí)間為21ms,幾次測試中遇到的最長處理時(shí)間也僅為78ms。
但當(dāng)?shù)卿浫舜芜_(dá)到500/min時(shí),會(huì)出現(xiàn)明顯的性能下降,部分登錄請求的處理時(shí)間會(huì)超過3000ms。