CAS实现http验证的单点登陆

 1. 环境

 Windows XPJDK1.6.0_11Tomcat6.0.10

2. 下载资源

 服务端:cas-server-3.3.3-release.zip 

         下载地址:http://downloads.jasig.org/cas/ 

 客户端:cas-client-2.0.11.zip 

         下载地址:http://downloads.jasig.org/cas-clients/ 

3. 发布CAS SERVER

  将下载的cas-server解压,进入cas-server-3.3.3/modules,复制cas-server-webapp-3.3.3.wartomcat/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验证。

Code:
  1. if (!u.getProtocol().equals("https"))  
  2.                 throw new IOException("only 'https' URLs are valid for this method");  

再命令行进入cas-client-2.0.11/java目录,运行命令:ant dist

如果没有安装ant,则需先安装ant并配好环境变量,也可以用其他方式进行编译打包。

5. 配置服务端 CAS SERVER

5.1 配置Tomcat 6.0/webapps/cas/WEB-INF/deployerConfigContext.xml 

找到

增加参数p:requireSecure="false",是否需要安全验证,即HTTPSfalse为不采用,加上去之后如下:

5.2 配置Tomcat 6.0/webapps/cas/WEB-INF/spring-configuration/ ticketGrantingTicketCookieGenerator.xml

找到

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窗口,都不需要验证。

5.3 配置Tomcat 6.0/webapps/cas/WEB-INF/spring-configuration/ warnCookieGenerator.xml

找到

p:cookieSecure="true"

p:cookieMaxAge="-1"

p:cookieName="CASPRIVACY"

p:cookiePath="/cas" />

同样将参数p:cookieSecure="true"改为p:cookieSecure="false",理由同上。

6. 配置客户端 CAS CLIENT

6.1 新建两个web工程,例如App1App2

将修改客户端源代码后产生的casclient.jar文件拷贝到App1App2WEB-INF/lib下。casclient.jarcas-client-2.0.11/java/lib目录下。

6.2 修改两个工程的index.jsp文件

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>

   <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>

   <href="http://localhost:8080/App1">App1a>

  body>

html>

6.3 配置两个工程的web.xml

两个工程的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地址即可。

 

6.4 发布客户端应用

重启Tomcat服务器,发布App1App2Tomcat服务器,启动IE浏览器,在地址栏输入http://localhost:8080/App1,如果进入了cas server的登陆页面,说明URL拦截成功,输入相同的用户名和密码后进入App1的页面。

 

点击链接App2,如果不需要登陆就进入了App2的界面,则说明实现了单点登陆。

 

 

7. 数据库验证配置

简单配置后,可以使用相同的用户名和密码进行登录。这个不实际,可以通过配置实现连接自己的数据库进行配置。这里有个前提,就是所有系统需要使用相同的用户表和密码加密方法,可以使用CAS自带的加密方法(/org/jasig/cas/authentication/handler/ DefaultPasswordEncoder.class)或自己用JAVA写的加密方法。

7.1 配置deployerConfigContext.xml

进入目录tomcat/webapps/cas/WEB-INF,打开文件deployerConfigContext.xml,找到下面的代码:

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

    

这是默认的验证方法。同时还有两种可选,如下:

方法1

 

               

              " />

              

方法2

                abstract="false" lazy-init="default" autowire="default" dependency-check="default">

 

                " />

                "/>

                "/>

                    

               

另外,也可以写出自己的方法验证,修改BEANCLASS属性即可。如果没有密码没有加密,则可以把参数去掉。

将默认的验证bean注释掉,选择两种数据库验证中的一种配置在deployerConfigContext.xml

中,位置与默认的验证bean相同。两种数据库验证bean都引用了casDataSource Bean,将casDataSource配置在deployerConfigContext.xml中,注意casDataSource bean 必须配置在节点下面,而不是配置在authenticationManager bean的属性节点中,不然会报错。

      

 

如果用到了密码加密,则还需配置passwordEncoder bean

        class="org.jasig.cas.authentication.handler.DefaultPasswordEncoder" autowire="byName">      

          

7.2 导入相关jar

     由于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

7.3 建立用户表

在命令行运行命令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进行测试了。

 

 

8 附录

8.1 App1build.xml 

Code:
  1. xml version="1.0" encoding="UTF-8"?>  
  2. <project name="App1" default="war" basedir=".">  
  3.     <property name="app.name" value="App1" />  
  4.     <property name="src.dir" value="src" />  
  5.     <property name="web.dir" value="WebRoot" />  
  6.     <property name="build.dir" value="${web.dir}/WEB-INF" />  
  7.     <property name="build.classes.dir" value="${build.dir}/classes" />  
  8.     <property name="tomcat.home" value="D:/JavaEEServer/Tomcat 6.0" />  
  9.     <property name="tomcat.deploy.dir" value="${tomcat.home}/webapps" />  
  10.   
  11.     <path id="classpath">  
  12.         <fileset dir="${build.dir}/lib">  
  13.             <include name="*.jar" />  
  14.         fileset>  
  15.         <fileset dir="${tomcat.home}/lib">  
  16.             <include name="*.jar" />  
  17.         fileset>  
  18.         <pathelement location="${build.classes.dir}" />  
  19.     path>  
  20.   
  21.     <target name="prepare">  
  22.         <mkdir dir="${build.classes.dir}" />  
  23.     target>  
  24.   
  25.     <target name="javac" depends="prepare">  
  26.         <javac srcdir="${src.dir}" destdir="${build.classes.dir}" deprecation="false" debug="on" classpathref="classpath">  
  27.         javac>  
  28.     target>  
  29.   
  30.     <target name="war" depends="javac">  
  31.         <war warfile="${app.name}.war" webxml="${build.dir}/web.xml" basedir="${web.dir}">  
  32.             <exclude name="*/web.xml"/>  
  33.         war>  
  34.     target>  
  35.       
  36.     <target name="deploy" depends="war">  
  37.         <copy file="${app.name}.war" todir="${tomcat.deploy.dir}">copy>  
  38.     target>  
  39. project>  

你可能感兴趣的:(tomcat,数据库,bean,加密,encoding,服务器)