CAS SSO系列教程:(三)CAS SSO的简单实现

本系列教程为gevin.me原创文章,转载请注明: CAS SSO系列教程:(三)CAS SSO的简单实现 | Gevin’s Blog

本文将介绍如何搭建CAS Server服务端程序,并创建两个客户端程序,实现访问其中一个客户端程序的授权页面后跳转到CAS认证系统中验证,验证成功后访问另外一个客户端程序的授权页面时无需输入用户名密码。

一、搭建CAS Server

将前面文章中下载下来的文件 cas-server-3.4.11\modules\cas-server-webapp-3.4.11.war 命名为cas.war,放到C:\Tomcat6_CAS\webapps下面,启动Tomcat,访问https://sso.gevin.me:8443/cas

若出现下面界面,则表示搭建成功。

输入相同的用户名和密码后,出现以下界面:

二、编程两个客户端程序ClientA和ClientB

在Eclipse中的结构如下:

两个程序结构一样,内容也差不多,其中protected/success.jsp是授权页面,需登录后才能访问。public.jsp页面是公共页面,无需验证。需要加入的jar包有五个,见上图!

web.xml中的内容:

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
	xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
	id="WebApp_ID" version="2.5">
	<display-name>clientA</display-name>

	<filter>
		<filter-name>CAS Authentication Filter</filter-name>
		<filter-class>org.jasig.cas.client.authentication.AuthenticationFilter</filter-class>
		<init-param>
			<param-name>casServerLoginUrl</param-name>
			<param-value>https://sso.gevin.me:8443/cas/login</param-value>
		</init-param>
		<init-param>
			<param-name>serverName</param-name>
			<param-value>http://client.gevin.me</param-value>
		</init-param>
		<init-param>
			<param-name>renew</param-name>
			<param-value>false</param-value>
		</init-param>
		<init-param>
			<param-name>gateway</param-name>
			<param-value>false</param-value>
		</init-param>
	</filter>

	<filter>
		<filter-name>CAS Validation Filter</filter-name>
		<filter-class>org.jasig.cas.client.validation.Cas20ProxyReceivingTicketValidationFilter</filter-class>
		<init-param>
			<param-name>casServerUrlPrefix</param-name>
			<param-value>https://sso.gevin.me:8443/cas/</param-value>
		</init-param>
		<init-param>
			<param-name>serverName</param-name>
			<param-value>http://client.gevin.me</param-value>
		</init-param>
		<init-param>
			<param-name>proxyCallbackUrl</param-name>
			<param-value>http://client.gevin.me/clientA/proxyCallback</param-value>
		</init-param>
		<init-param>
			<param-name>proxyReceptorUrl</param-name>
			<param-value>/clientA/proxyCallback</param-value>
		</init-param>
	</filter>

	<filter>
		<filter-name>CAS HttpServletRequest Wrapper Filter</filter-name>
		<filter-class>org.jasig.cas.client.util.HttpServletRequestWrapperFilter</filter-class>
	</filter>

	<filter>
		<filter-name>CAS Assertion Thread Local Filter</filter-name>
		<filter-class>org.jasig.cas.client.util.AssertionThreadLocalFilter</filter-class>
	</filter>

	<filter-mapping>
		<filter-name>CAS Authentication Filter</filter-name>
		<url-pattern>/protected/*</url-pattern>
	</filter-mapping>

	<filter-mapping>
		<filter-name>CAS Validation Filter</filter-name>
		<url-pattern>/*</url-pattern>
	</filter-mapping>

	<filter-mapping>
		<filter-name>CAS HttpServletRequest Wrapper Filter</filter-name>
		<url-pattern>/*</url-pattern>
	</filter-mapping>

	<filter-mapping>
		<filter-name>CAS Assertion Thread Local Filter</filter-name>
		<url-pattern>/*</url-pattern>
	</filter-mapping>

	<filter-mapping>
		<filter-name>CAS Validation Filter</filter-name>
		<url-pattern>/proxyCallback</url-pattern>
	</filter-mapping>

	<welcome-file-list>
		<welcome-file>index.jsp</welcome-file>
	</welcome-file-list>

</web-app>

 

运行效果:

访问ClientA页面的公共页面,无需验证:

点击“访问ClientA的授权页面”后跳转到CAS认证中心:

输入用户名和密码admin后,自动跳转到ClientA的授权页面:

此时再次点击“访问ClientB的授权页面”后,因为访问ClientA时已经到CAS验证过,所以此时不需要验证也可以访问到ClientB的授权页面,实现了一次登录,多点通行的效果!

至此,一个简单的单点登录系统就完成了!!

当然,这个只是CAS SSO中最最简单的例子了,要想完成一个真正的单点登录系统,还需要在此基本上进行改造,比如验证数据库中的用户名和密码,兼容各种开发语言开发出来的应用系统等等。

以后我将陆续进行介绍~~

本文固定链接: http://gevin.me/503.html | Gevin's Blog

该日志由 admin 于2012年04月08日发表在 Java 分类下, 通告目前不可用,你可以至底部留下评论。
原创文章转载请注明: CAS SSO系列教程:(三)CAS SSO的简单实现 | Gevin's Blog
关键字: , , , ,

CAS SSO系列教程:(三)CAS SSO的简单实现:目前有12 条留言

  1. 9楼
    chinaren:

    xercesImpl.jar
    xml-apis.jar
    这两个JAR在CAS包中没有。是自己单独下载的吗?

    2012-04-24 11:45 [回复]
  2. 8楼
    chinaren:

    对这个WEB。XML配置看得晕晕的。完全不知道各个配置项的含义,

    2012-04-24 14:42 [回复]
    • chinaren:

      我现在clientA登陆后才能访问success.jsp这个正确,但我访问clientB的success.jsp却也还需要先登陆。没有达到效果

      2012-04-24 15:19 [回复]
  3. 7楼
    admin:

    首先很感谢对我博客的关注,其实我也是初学者,目前的进度最多就是比你快一点点而已。我也没有真正实现过单点登录,只是正在学,顺便做做笔记,希望最终能整合单位已有的项目。

    问题1:首先需要下载xerces工具包,下载网址http://xerces.apache.org/#xerces2-j
    里面有
    xercesImpl.jar
    xml-apis.jar

    问题2:对于这个web.xml,其实我也是按照官方提供的来配置的,具体每一项的说明,你可以google一下,应该都有具体的解释的。

    问题3:clientA和clientB都必须配置web.xml,才能让实现单点登录。

    2012-04-24 17:14 [回复]
  4. 6楼
    chinaren:

    郁闷呀。。clientA和clientB都必须配置web.xml,才能让实现单点登录。我都配了的。但还是两个系统都分别需要登陆。。你帮我远程看一下吧

    2012-04-24 21:58 [回复]
    • cas:

      解决没?我也出现跟你一样的问题了

      2012-11-04 15:05 [回复]
  5. 5楼
    theo:

    你好。页面的代码能发出来吗

    2012-05-15 15:19 [回复]
  6. 4楼
    mashiguang:

    不用代理模式的话,不用配置proxyCallbackUrl、proxyReceptorUrl

    2012-07-25 13:32 [回复]
  7. 地板
    Zwens:

    楼主,你如何获得登入的用户名的

    2012-09-11 17:28 [回复]
    • admin:

      在JSP页面,是用这种方式获取的。
      用户名:< %= request.getRemoteUser()== null ? "null" : request.getRemoteUser() %>

      2012-09-12 20:17 [回复]
  8. 板凳
    jiarx:

    你好 我从头到尾都是按照你的配置走的 如果直接访问服务器的登录 可以正常的跳转到成功界面 但是我接着配置配置客户端后在访问的时候:可以进入到服务器端的登录界面 当我提交按钮的时候浏览器一直在转圈圈 知道挂掉 找不到服务器 不知道是哪里出现的问题 这个我已经整了好久了 这个问题一直解决不了 希望您能帮助下小妹 谢谢楼主了 我的qq:1537006623

    2015-07-20 17:54 [回复]
  9. 沙发
    jiarx:

    开始的时候我写的时候也出现了“chinaren”的问题 也是一个登录了 但是另外一个也要登录 不知道为什么

    2015-07-20 17:56 [回复]

发表评论

快捷键:Ctrl+Enter