本文以tomcat6.0为例
准备工作:下载cas-server-3.1.1-release.zip和cas-client-java-2.1.1.zip。
1、CAS Server
CAS Server 是一套基于 Java 实现的服务,该服务以一个 Java Web Application 单独部署在与 servlet2.3 兼容的 Web 服务器上,另外,由于 Client 与 CAS Server 之间的交互采用 Https 协议,因此部署 CAS Server 的服务器还需要支持 SSL 协议。当 SSL 配置成功过后,像普通 Web 应用一样将 CAS Server 部署在服务器上就能正常运行了,不过,在真正使用之前,还需要扩展验证用户的接口。
2、配置 Tomcat 使用 Https 协议
1)、生成key,在命令行中输入:keytool -genkey -alias mykey -keyalg RSA -keystore c:/tomcat.key
产生别名为mykey的证书放到c:/tomcat.key。
注意:您的名字与姓氏是什么?
[Unknown]: 主机名或者IP最好是做了host映射的主机名,测试的时候最好写成localhost,不然通过 localhost访问会报错。
2)、在tomcat的server.xml文件里加入,指定key文件地址。
<Connector port="8443" protocol="org.apache.coyote.http11.Http11NioProtocol" SSLEnabled="true" maxThreads="150" scheme="https" secure="true" clientAuth="false" sslProtocol="TLS" keystoreFile="C:/tomcat.key" />
3)、重启tomcat,就可以通过https://localhost:8443访问了。
3、搭建CAS服务端
1)、将下载的cas-server-3.1.1-release.zip解压
2)、将解压包内的modules文件夹下的cas-server-webapp.war 拷贝到 tomcat的 webapps 目录,并更名为 cas.war
可以重新启动 tomcat,然后访问:https://localhost:8443/cas ,如果能出现正常的 CAS 登录页面,则说明 CAS Server 已经部署成功。
CAS Server通过spring进行的配置
1)、配置查询用户数据源,打开文件 %CATALINA_HOME%/webapps/cas/WEB-INF/deployerConfigContext.xml,添加一个新的 bean 标签,以mysql为例。
拷贝mysql jdbc jar到cas webapp 下。
<bean id="casDataSource" class="org.apache.commons.dbcp.BasicDataSource"> <property name="driverClassName"> <value>com.mysql.jdbc.Driver</value> </property> <property name="url"> <value>jdbc:mysql://localhost:3306/mydb?characterEncoding=utf-8</value> </property> <property name="username"> <value>root</value> </property> <property name="password"> <value>admin</value> </property> </bean>
2)、配置查询sql
<bean class="org.jasig.cas.adaptors.jdbc.QueryDatabaseAuthenticationHandler"> <property name="dataSource" ref="casDataSource" /> <property name="sql" value="select password from user where lower(username) = lower(?)" /> <property name="passwordEncoder" ref="myPasswordEncoder"/> </bean> <bean id="SearchModeSearchDatabaseAuthenticationHandler" class="org.jasig.cas.adaptors.jdbc.SearchModeSearchDatabaseAuthenticationHandler" abstract="false" scope="singleton" lazy-init="default" autowire="default"> <property name="tableUsers"> <value>user</value> </property> <property name="fieldUser"> <value>username</value> </property> <property name="fieldPassword"> <value>password</value> </property> <property name="dataSource" ref="casDataSource"/> </bean>
3)、配置密码加密策略,这个类需要自己实现。
<bean id="myPasswordEncoder" class="org.jasig.cas.util.MyPasswordEncoder"/>
比如md5。
public class MyPasswordEncoder implements PasswordEncoder { public String encode(String arg0) { // TODO Auto-generated method stub byte[] salt = PasswordUtil.getStaticSalt(); String ciphertext = PasswordUtil.encrypt("admin", arg0, salt); return ciphertext; } }
5、搭建CAS客户端
1)、配置客户端服务器的HTTPS协议方法同服务端。
2)、cas-client-java-2.1.1.zip解压并将casclient.jar拷贝到你的项目的lib目录下,/cas-client-java-2.1.1/lib下的所有包copy到WEB-INF/lib目录下。
3)、交换秘钥,
根据秘钥生成证书 keytool -export -file client.cert -alias mykey -keystore c:/tomcat.key。
将证书导入到客户端keytool -import -trustcacerts -file client.cert -keypass changeit -keystore "%JAVA_HOME%/jre/lib/security/cacerts" -alias mykey。
6、配置应用的filter
新建两个webapp,作为单点登录的web应用,webcas1,webcas2,在各自的web.xml下加入filter,设置filter拦截请求到CAS服务器验证登录信息。
<filter> <filter-name>CAS Filter</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://casserver:8443/cas/login</param-value> </init-param> <init-param> <param-name>edu.yale.its.tp.cas.client.filter.validateUrl</param-name> <param-value>https://localhost:8443/cas/serviceValidate</param-value> </init-param> <init-param> <param-name>edu.yale.its.tp.cas.client.filter.serverName</param-name> <param-value>domain1:8081</param-value> </init-param> </filter> <filter-mapping> <filter-name>CAS Filter</filter-name> <url-pattern>/*</url-pattern> </filter-mapping>
<filter> <filter-name>CAS Filter</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://casserver:8443/cas/login</param-value> </init-param> <init-param> <param-name>edu.yale.its.tp.cas.client.filter.validateUrl</param-name> <param-value>https://localhost:8443/cas/serviceValidate</param-value> </init-param> <init-param> <param-name>edu.yale.its.tp.cas.client.filter.serverName</param-name> <param-value>domain2:8081</param-value> </init-param> </filter> <filter-mapping> <filter-name>CAS Filter</filter-name> <url-pattern>/*</url-pattern> </filter-mapping>
// 以下两者都可以获取用户登录信息 session.getAttribute(CASFilter.CAS_FILTER_USER); session.getAttribute("edu.yale.its.tp.cas.client.filter.user");
7、测试SSO