參考資料:安裝 CAS 服務(wù)器
注釋
1粗梭、下載方式
在 http://central.maven.org/maven2/org/jasig/cas/cas-server-webapp/ 頁(yè)面選擇合適的版本争便,下載對(duì)應(yīng)目錄下的cas-server-webapp-version.war。
2断医、初始登錄
在/WEB-INF/deployerConfigContext.xml中的
<bean id="primaryAuthenticationHandler" class="org.jasig.cas.authentication.AcceptUsersAuthenticationHandler">
<property name="users">
<map>
<entry key="casuser" value="Mellon"/>
</map>
</property>
</bean>
配置了初始認(rèn)證方式滞乙,這里的username/password
即casuser/Mellon
。
修改認(rèn)證方式
配置CAS服務(wù)端通過(guò)查詢(xún)數(shù)據(jù)庫(kù)的方式認(rèn)證用戶鉴嗤。
首先與Spring應(yīng)用一樣配置數(shù)據(jù)庫(kù)斩启,這里使用的是PostgreSQL數(shù)據(jù)庫(kù)。
<bean id="casDataSource" class="org.apache.commons.dbcp.BasicDataSource">
<property name="driverClassName" value="org.postgresql.Driver" />
<property name="url" value="jdbc:postgresql://localhost:5432/jemoii" />
<property name="username" value="postgres" />
<property name="password" value="password" />
<property name="maxActive" value="20" />
<property name="maxIdle" value="10" />
<property name="maxWait" value="-1" />
</bean>
建立新的認(rèn)證方式j(luò)dbcAuthenticationHandler醉锅,
<bean id="jdbcAuthenticationHandler" class="org.jasig.cas.adaptors.jdbc.QueryDatabaseAuthenticationHandler">
<property name="dataSource" ref="casDataSource" />
<property name="sql" value="select password from user_info where email = ?" />
<property name="passwordEncoder">
<bean class="me.voler.cas.AddSaltPasswordEncoder"/>
</property>
</bean>
- dataSource屬性即前面配置的數(shù)據(jù)庫(kù)兔簇;
- sql屬性是一條SQL語(yǔ)句,功能即根據(jù)登錄使用的username查詢(xún)password,根據(jù)實(shí)際的table做相應(yīng)的修改垄琐;
- passwordEncoder屬性是實(shí)現(xiàn)了
org.jasig.cas.authentication.handler.PasswordEncoder
接口的Bean边酒。
CAS本身提供了org.jasig.cas.authentication.handler.DefaultPasswordEncoder
、org.jasig.cas.authentication.handler.PlainTextPasswordEncoder
兩種實(shí)現(xiàn)狸窘,這里根據(jù)實(shí)際的加密方式新建了me.voler.cas.AddSaltPasswordEncoder
甚纲,即在rawPassword后面拼接自定義PASSWORD_SALT后再使用MD5加密。
package me.voler.cas;
import org.jasig.cas.authentication.handler.DefaultPasswordEncoder;
import org.jasig.cas.authentication.handler.PasswordEncoder;
public class AddSaltPasswordEncoder implements PasswordEncoder {
private static final String PASSWORD_SALT = "xx";
@Override
public String encode(String password) {
DefaultPasswordEncoder encoder = new DefaultPasswordEncoder("MD5");
return encoder.encode(password + PASSWORD_SALT);
}
}
應(yīng)用新的認(rèn)證方式j(luò)dbcAuthenticationHandler
將deployerConfigContext.xml中id為authenticationManager
的Bean的
<constructor-arg>
<map>
<entry key-ref="proxyAuthenticationHandler" value-ref="proxyPrincipalResolver" />
<entry key-ref="primaryAuthenticationHandler" value-ref="primaryPrincipalResolver" />
</map>
</constructor-arg>
修改為
<constructor-arg>
<map>
<entry key-ref="proxyAuthenticationHandler" value-ref="proxyPrincipalResolver" />
<entry key-ref="jdbcAuthenticationHandler" value-ref="primaryPrincipalResolver" />
</map>
</constructor-arg>
添加修改認(rèn)證方式依賴(lài)的jar朦前,在/WEB-INF/lib目錄下添加
- commons-pool-version.jar
- commons-dbcp-version.jar
- cas-server-support-jdbc-version.jar
現(xiàn)在可以使用數(shù)據(jù)庫(kù)中的username/password
登錄CAS服務(wù)端介杆。