1目的
撰写本文的目的是记录一个简单、以数据库为验证用户的单点登陆的
CAS
配置过程,看过其他文档,要么没有配置过程,要么过于复杂。配置之前建议先仔细研究下相关的参考文档,只有明白了相关原理,配置起来其实很简单。
2名词解说
Single Sign On -
通过用户登录一次,即可获得需访问系统和应用软件的授权。
Yale CAS -
耶鲁大学开发的单点登录(
Single Sign On
)系统称为
CAS
Central Authentication Server
)被设计成一个独立的
Web
应用程序
(cas.war)
CAS
网址
3参考
Keytool
使用指南:
Tomcat-ssl
配置指南:
Cas
文档:
4安装环境
WINXP + JDK1.5 + Tomcat 5.5.30 +
5配置过程
5.1安装和配置Tomcat的SSL
参考以下帖子-Tomcat SSL配置大全:
5.2配置CAS服务器端
解压 cas-server-3.0.6.zip,把 \target\cas.war copy 到 %CATALINA_HOME%\webapps\ 下
5.3配置CAS 客户端
我们要将
tomcat
jsp-examples
servlets-examples2
个应用全部经过
SSO
的验证,
CAS
缺省验证方式的类是:
org.jasig.cas.authentication.handler.support.SimpleTestUsernamePasswordAuthenticationHandler
这种配置只是用于测试目的,只要用户名和密码相同就可以验证通过了。
5.3.1配置应用servlets-examples
修改
<!---->\webapps\servlets-examples\WEB-INF\web.xml

servlet servlet-mapping 中间加上以下设置

xml 代码
  1. <filter>

  2. <filter-name>CASFilterfilter-name>

  3. <filter-class>

  4. edu.yale.its.tp.cas.client.filter.CASFilter

  5. filter-class>

  6. <init-param>

  7. <param-name>

  8. edu.yale.its.tp.cas.client.filter.loginUrl

  9. param-name>

  10. <param-value>https://localhost:8443/cas/loginparam-value>

  11. init-param>

  12. <init-param>

  13. <param-name>

  14. edu.yale.its.tp.cas.client.filter.validateUrl

  15. param-name>

  16. <param-value>

  17. https://localhost:8443/cas/proxyValidate

  18. param-value>

  19. init-param>

  20. <init-param>

  21. <param-name>

  22. edu.yale.its.tp.cas.client.filter.serverName

  23. param-name>

  24. <param-value>localhost:8080param-value>

  25. init-param>

  26. <init-param>

  27. <param-name>

  28. edu.yale.its.tp.cas.client.filter.serverName2

  29. param-name>

  30. <param-value>192.168.5.13:8080param-value>

  31. init-param>

  32. filter>

  33. <filter-mapping>

  34. <filter-name>CASFilterfilter-name>

  35. <url-pattern>/servlet/*url-pattern>

  36. filter-mapping>

: edu.yale.its.tp.cas.client.filter.serverName
是表示需要
redirect
的网址
如果有
1
个以上的网址
,
则可以一直增加上去
注意
param-name
要不一样
edu.yale.its.tp.cas.client.filter.loginUrl
redirect
的网址

5.3.2配置应用jsp-examples
修改%CATALINA_HOME%\webapps\jsp-examples\WEB-INF\web.xml在 servlet 及 servlet-mapping中间加上以下设置:
xml 代码
  1. <filter>

  2. <filter-name>CASFilterfilter-name>

  3. <filter-class>

  4. edu.yale.its.tp.cas.client.filter.CASFilter

  5. filter-class>

  6. <init-param>

  7. <param-name>

  8. edu.yale.its.tp.cas.client.filter.loginUrl

  9. param-name>

  10. <param-value>https://localhost:8443/cas/loginparam-value>

  11. init-param>

  12. <init-param>

  13. <param-name>

  14. edu.yale.its.tp.cas.client.filter.validateUrl

  15. param-name>

  16. <param-value>

  17. https://localhost:8443/cas/proxyValidate

  18. param-value>

  19. init-param>

  20. <init-param>

  21. <param-name>

  22. edu.yale.its.tp.cas.client.filter.serverName

  23. param-name>

  24. <param-value>localhost:8080param-value>

  25. init-param>

  26. <init-param>

  27. <param-name>

  28. edu.yale.its.tp.cas.client.filter.serverName2

  29. param-name>

  30. <param-value>192.168.5.13:8080param-value>

  31. init-param>

  32. filter>

  33. <filter-mapping>

  34. <filter-name>CASFilterfilter-name>

  35. <url-pattern>/*url-pattern>

  36. filter-mapping>

: jsp-examples
servlets-examples
基本上大同小异
唯一不一样就是
filter-mapping
url-pattern
jsp-examples
/*
servlets-examples
/servlet/*
5.3.3设置需要用到的cas-client库
将casclient-2.1.1.zip改名为casclient-2.1.1.jar, copy
jsp-examples
servlets-examples
lib
5.4测试配置
启动tomcat,访问如下地址:
这时,系统会提示你将要访问的是加密网站,并问你接受该网站提供的证书,点接受后,将显示CAS单点登陆页面,地址变成如下:
输入任意的用户名,密码和用户名相同就可以进入刚才要访问的页面。
这时再访问servlets-examples 应用下面的任一个servlet,如:
访问后,你会发现地址栏的地址变为:
后面增加了?ticket=ST-3-6EuKFN4M2aLj9cVup6sABykzheEnAnY3Zmb-20,这就是CAS的ticket(票据)
刚才我们其实配置了2个应用都是需要验证用户的,如果用户先访问servlets-examples应用下面的servlet,同样会提示登陆,再访问jsp-examples,也不会提示登陆了,说明我们的单点登陆配置成功。
5.5配置CAS通过数据库验证用户
CAS缺省配置只是用于测试目的,实际应用中,通过数据库进行验证用户最为常见,所以,我们现在测试通过数据库验证用户。先停止tomcat.
5.5.1创建数据库表
我们测试使用的是oracle数据库,可以选用任何一个支持JDBC的数据库。用scott/tiger登陆sqlplus,输入如下语句创建用户表和输入测试数据:
create table app_user(username varchar(100), password varchar(100));
insert into app_user values('tomcat', 'tomcat');
insert into app_user values('cas', 'cas');
commit;
5.5.2修改CAS 服务器端配置
修改%CATALINA_HOME%\webapps\cas\WEB-INF\ deployerConfigContext.xm把以下的程序代码屏蔽掉:
xml 代码

<beanclass="org.jasig.cas.authentication.handler.support.SimpleTestUsernamePasswordAuthenticationHandler"/>

在同一地方加上以下程序代码:

xml 代码

<beanclass="org.jasig.cas.adaptors.jdbc.QueryDatabaseAuthenticationHandler">

<propertyname="sql"value="select password from app_user where username=?"/>

<propertyname="dataSource"ref="dataSource"/>

bean>

定义 dataSource bean,注意,配置的地方应该在之前,不要放错了位置,不是和以上验证bean放在一起。

xml 代码

<beanid="dataSource"class="org.springframework.jdbc.datasource.DriverManagerDataSource"destroy-method="close">

<propertyname="driverClassName"><value>oracle.jdbc.driver.OracleDrivervalue>property>

<propertyname="url"><value>jdbc:oracle:thin:@127.0.0.1:1521:oracle9ivalue>property>

<propertyname="username"><value>scottvalue>property>

<propertyname="password"><value>tigervalue>property>

bean>

5.5.3添加CAS 服务器需要用到的jar
把 cas-server-3.0.6.zip里的 \target\cas-server-jdbc-3.0.6.jar copy 到%CATALINA_HOME%\webapps\cas\WEB-INF\lib下。
把 Oracle jdbc jar即ojdbc14.jar copy到%CATALINA_HOME%\webapps\cas\WEB-INF\lib下。
5.5.4再次测试

启动tomcsat,重复刚才的测试,哈哈,输入tomcat/tomcat,可以了。