1. 环境
Windows XP、JDK1.6.0_11、Tomcat6.0.10
服务端:cas-server-3.3.3-release.zip
下载地址:http://downloads.jasig.org/cas/
客户端:cas-client-2.0.11.zip
下载地址:http://downloads.jasig.org/cas-clients/
将下载的cas-server解压,进入cas-server-3.3.3/modules,复制cas-server-webapp-3.3.3.war到tomcat/webapps下,修改名称为cas.war,方便使用,原来的名字太长了。然后启动IE,输入http://localhost:8080/cas检验是否可以访问,如果可以,则输入相同的用户名和密码,比如cas/cas,测试是否能登录。
4. 修改客户端源代码
解压cas-client-2.0.11.war,进入cas-client-2.0.11/java/src,修改edu.yale.its.tp.cas.util包下的SecureURL类,在retrieve方法里面注释掉如下两行,使之支持http验证。
再命令行进入cas-client-2.0.11/java目录,运行命令:ant dist
如果没有安装ant,则需先安装ant并配好环境变量,也可以用其他方式进行编译打包。
找到
|
增加参数p:requireSecure="false",是否需要安全验证,即HTTPS,false为不采用,加上去之后如下:
|
找到
p:cookieSecure="true" p:cookieMaxAge="-1" p:cookieName="CASTGC" p:cookiePath="/cas" /> |
将参数p:cookieSecure="true"改为p:cookieSecure="false",同理为HTTPS验证相关,TRUE为采用HTTPS验证,与deployerConfigContext.xml的参数保持一致。
参数p:cookieMaxAge="-1",简单说是COOKIE的最大生命周期,-1为无生命周期,即只在当前打开的IE窗口有效,IE关闭或重新打开其它窗口,仍会要求验证。可以根据需要修改为大于0的数字,比如3600等,意思是在3600秒内,打开任意IE窗口,都不需要验证。
找到
p:cookieSecure="true" p:cookieMaxAge="-1" p:cookieName="CASPRIVACY" p:cookiePath="/cas" /> |
同样将参数p:cookieSecure="true"改为p:cookieSecure="false",理由同上。
将修改客户端源代码后产生的casclient.jar文件拷贝到App1和App2的WEB-INF/lib下。casclient.jar在cas-client-2.0.11/java/lib目录下。
App1:
<%@ page language="java" pageEncoding="UTF-8"%> DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <title>App1title> head> <body> 这是App1的界面 <br> <a href="http://localhost:8080/App2">App2a> body> html> |
App2:
<%@ page language="java" pageEncoding="UTF-8"%> DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <title>App2title> head> <body> 这是App2的界面 <br> <a href="http://localhost:8080/App1">App1a> body> html> |
两个工程的web.xml 配置完全相同:
xml version="1.0" encoding="UTF-8"?> <web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"> <welcome-file-list> <welcome-file>index.jspwelcome-file> welcome-file-list>
<filter> <filter-name>CAS Filterfilter-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>http://localhost:8080/cas/loginparam-value> init-param> <init-param> <param-name> edu.yale.its.tp.cas.client.filter.validateUrl param-name> <param-value> http://localhost:8080/cas/serviceValidate param-value> init-param>
<init-param> <param-name> edu.yale.its.tp.cas.client.filter.serverName param-name> <param-value>localhost:8080param-value> init-param> filter>
<filter-mapping> <filter-name>CAS Filterfilter-name> <url-pattern>/*url-pattern> filter-mapping> web-app> |
注:本例子客户端和服务端发布在同一个tomcat,如果发布在不同的服务器,将url地址中的localhost改为相应的ip地址即可。
重启Tomcat服务器,发布App1和App2到Tomcat服务器,启动IE浏览器,在地址栏输入http://localhost:8080/App1,如果进入了cas server的登陆页面,说明URL拦截成功,输入相同的用户名和密码后进入App1的页面。
点击链接App2,如果不需要登陆就进入了App2的界面,则说明实现了单点登陆。
简单配置后,可以使用相同的用户名和密码进行登录。这个不实际,可以通过配置实现连接自己的数据库进行配置。这里有个前提,就是所有系统需要使用相同的用户表和密码加密方法,可以使用CAS自带的加密方法(/org/jasig/cas/authentication/handler/ DefaultPasswordEncoder.class)或自己用JAVA写的加密方法。
进入目录tomcat/webapps/cas/WEB-INF,打开文件deployerConfigContext.xml,找到下面的代码:
|
这是默认的验证方法。同时还有两种可选,如下:
方法1:
|
方法2:
abstract="false" lazy-init="default" autowire="default" dependency-check="default">
|
另外,也可以写出自己的方法验证,修改BEAN的CLASS属性即可。如果没有密码没有加密,则可以把参数
将默认的验证bean注释掉,选择两种数据库验证中的一种配置在deployerConfigContext.xml
中,位置与默认的验证bean相同。两种数据库验证bean都引用了casDataSource Bean,将casDataSource配置在deployerConfigContext.xml中,注意casDataSource bean 必须配置在
|
如果用到了密码加密,则还需配置passwordEncoder bean:
class="org.jasig.cas.authentication.handler.DefaultPasswordEncoder" autowire="byName">
|
由于CAS-SERVER.WAR默认没有采用数据库验证,所以部分JAR包没有引入,下面这些需要复制到webapps/cas/WEB-INF/lib里面:
mysql-connector-java-5.1.8.jar
cas-server-support-jdbc-3.3.3.jar
commons-dbcp.jar
commons-pool.jar
spring.jar
在命令行运行命令net start mysql 启动数据库,运行命令 mysql -uroot -plijiecsu 进入数据库(密码输入你自己的密码),进入数据库后运行命令 use test 选择test数据库,输入sql语句创建用户表:
create table tbUser ( id int primary key auto_increment, username varchar(30), password varchar(30) ); |
插入一个测试用户:
insert into tbUser values (null, 'test', 'test'); |
OK,现在可以启动Tomcat进行测试了。