使用cas在tomcat实现单点登录(精)2009-04-01 08:17cas是目前非常流行的企业应用SSO解决方案。本文就cas的配置及使用展开讨论,下图为cas原理:
一、软件准备:
1、apache-tomcat-6.0.18。
2、cas-server-3.3.1-release.zip(cas服务器)。
3、cas-client-2.0.11.zip。
二、配置tomcat的ssl
1、生成keystore证书
keytool -genkey -keyalg RSA -alias tomcatsso -dname "cn=localhost" -keystore server.keystore -storepass changeit
cn表示一个主机名或者一个域名,本机用localhost表示。
alias表示插入到证书中的别名。
命令执行完后,在当前目录生成server.keystore证书文件,注意,该文件一定要保护好,后面配置时需要用到。为了后面方便导入,将该文件直接生成在C:Program FilesJavajdk1.6.0_10jrelibsecurity目录下,该目录是我的jdk安装目录,注意:在windows下用导入证书时,目录名中间不能有空格,为了避免导入麻烦,jdk最好安装在没有空格的目录里。
2、导出证书
keytool -export -alias tomcatsso -file server.cer -keystore server.keystore -storepass changeit
该命令执行完后在当前目录生成证书文件server.cer
3、将server.cer导入到jdk的信任库中
在导入之前可以看看信任库中有什么证书
keytool -list -keystore cacerts -storepass changeit
执行完该命令后显示所有证书信息。默认情况下jdk1.6 u10的cacerts信任库中有59条证书信息。
如果信任库中已经有自己的证书信息了,可以用下面的命令删除:
keytool -delete -alias tomcatsso -keystore cacerts -keypass changeit
需要指定tomcatsso别名。
导入证书用一下命令:
keytool -import -alias tomcatsso -file server.cer -keystore cacerts -storepass changeit
执行结果如下:
以上就是tomcat中配置ssl的全部步骤。
三、打开tomcat的https
打开%CATALINA_HOME%/conf/server.xml,找到如下内容:
<!--
<Connector port="8443" protocol="HTTP/1.1" SSLEnabled="true"
maxThreads="150" scheme="https" secure="true"
clientAuth="false" sslProtocol="TLS" />
-->
将其换成如下内容
<Connector port="8443" protocol="org.apache.coyote.http11.Http11Protocol" SSLEnabled="true"
maxThreads="150" scheme="https" secure="true"
clientAuth="false" sslProtocol="TLS"
keystorePass="changeit" keystoreFile="C:server.keystore"/>
注意红色部分,我将证书文件拷贝到C盘根下了,不过这不是必须的,我只是为了让目录结构尽量短些。
如果一切顺利,启动tomcat,在浏览器中输入https://localhost:8443/,将会看到tomcat启动页面,说明tomcat的ssl已经配置成功。
四、配置cas server
1、解压cas-server-3.3.1-release.zip,找到cas-server-webapp-3.3.1.war,重命名为cas.war,
将其拷贝到tomcatwebapps下,启动tomcat,生成cas目录,在cas的WEB-INF下的lib目录中拷贝如下jar包:
cas-server-support-jdbc-3.3.1.jar(该文件也在cas-server-3.3.1-release.zip中)
commons-dbcp.jar
commons-pool.jar
spring.jar(必须的)
根据你的数据库的不同,再下个其中拷贝对应数据库的jdbc驱动,本文使用mysql,则拷贝
mysql-connector-java-5.0.5-bin.jar
2、配置cas的deployerConfigContext.xml
配置之前需要建立用户表:
打开cas/WEB-INF,打开deployerConfigContext.xml,先加入一个bean:
<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/mydata</value>
</property>
<property name="username">
<value>root</value>
</property>
<property name="password">
<value>111111</value>
</property>
</bean>
然后向下找到<bean
class="org.jasig.cas.authentication.handler.support.SimpleTestUsernamePasswordAuthenticationHandler" />
将其注释掉,添加如下配置:
<bean id="SearchModeSearchDatabaseAuthenticationHandler"
class="org.jasig.cas.adaptors.jdbc.SearchModeSearchDatabaseAuthenticationHandler"
abstract="false" lazy-init="default"
autowire="default" dependency-check="default">
<property name="tableUsers">
<value>t_users</value><!--表的名字-->
</property>
<property name="fieldUser">
<value>username</value><!--用户名对应的字段名-->
</property>
<property name="fieldPassword">
<value>password</value><!--口令对应的字段名-->
</property>
<property name="dataSource" ref="casDataSource" />
</bean>
cas server到此配置完毕,启动tomcat,在地址栏输入:https://localhost:8443/cas/login
不出意外,将出现登陆窗口,如果前面数据库中有数据,如用户名为xhd,口令为111111,则在该登录页面输入,点击登录后将显示登陆成功的页面。
五、配置cas客户端
1、在myeclipse中建立一个web project,在web.xml中添加如下内容:
<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://localhost: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>localhost:8080</param-value>
</init-param>
<init-param>
<param-name>edu.yale.its.tp.cas.client.filter.wrapRequest</param-name>
<param-value>true</param-value>
</init-param>(1)
</filter>
<filter-mapping>
<filter-name>CAS Filter</filter-name>
<url-pattern>/*</url-pattern>(2)
</filter-mapping>
注意:(1)部分表示在cas server登录成功后,可以自动跳转到客户端访问的页面。
(2)部分表示客户端的所有资源都将被保护,也就是说当客户端访问的任何页面都将被cas验证。
2、解压cas-client-2.0.11.zip,在cas-client-2.0.11.zipcas-client-2.0.11javalib下找到casclient.jar,将其拷贝到客户应用的WEB-INFlib下。
好了,启动tomcat,体验你的辛苦带来的乐趣吧。
参考:
使用 CAS 在 Tomcat 中实现单点登录
http://www.ibm.com/developerworks/cn/opensource/os-cn-cas/index.html