单点登录之Jasig CAS初体验_JAVA_编程开发_程序员俱乐部

中国优秀的程序员网站程序员频道CXYCLUB技术地图
热搜:
更多>>
 
您所在的位置: 程序员俱乐部 > 编程开发 > JAVA > 单点登录之Jasig CAS初体验

单点登录之Jasig CAS初体验

 2015/1/15 21:19:27  liunancun  程序员俱乐部  我要评论(0)
  • 摘要:准备工作官网:www.apereo.org(原www.jasig.org)点击菜单Projects&Communities->CAS->Download进入下载页面下载CASServer4.0.0Release和JasigCASClientforJavaversion3.2.1released:cas-server-4.0.0-release.zipcas-client-3.2.1-release.zip本地还需要有Tomcat运行环境服务端解压cas-server-4.0
  • 标签:单点登录
准备工作
官网:www.apereo.org(原www.jasig.org)
点击菜单Projects & Communities -> CAS -> Download进入下载页面
下载CAS Server 4.0.0 Release和Jasig CAS Client for Java version 3.2.1 released:
cas-server-4.0.0-release.zip
cas-client-3.2.1-release.zip

本地还需要有Tomcat运行环境

服务端
解压cas-server-4.0.0-release.zip
在解压出来的目录里面找到modules/cas-server-webapp-4.0.0.war
改名为cas后放到Tomcat的webapps目录下
启动Tomcat
浏览器打开http://10.61.41.152:8080/cas/login可以进入CAS登录页面
其中的用户名密码配置在Spring配置文件
打开cas/WEB-INF/deployerConfigContext.xml
找到primaryAuthenticationHandler的bean配置
可以看到初始用户名为casuser密码为Mellon
为了方便我们新增用户名跟密码为admin
重启Tomcat后就可以用我们新增的用户名admin登录CAS了

客户端
为了方便我们就直接用Tomcat的默认工程examples进行测试
把examples复制2份分别命名为examples1、examples2
解压cas-client-3.2.1-release.zip
将modules里面的jar包放到WEB-INF/lib目录下
注意这里需要去掉Tomcat已有的包否则会有冲突
留下的包有下面这些:
cas-client-core-3.2.1.jar
cas-client-integration-atlassian-3.2.1.jar
cas-client-integration-jboss-3.2.1.jar
cas-client-integration-tomcat-common-3.2.1.jar
cas-client-integration-tomcat-v6-3.2.1.jar
cas-client-integration-tomcat-v7-3.2.1.jar
cas-client-support-distributed-ehcache-3.2.1.jar
cas-client-support-distributed-memcached-3.2.1.jar
commons-codec-1.4.jar
commons-logging-1.1.jar
ehcache-core-2.2.0.jar
slf4j-api-1.5.11.jar
xmlsec-1.3.0.jar
接下来最重要的是要配置CAS的过滤器
打开web.xml增加下面配置
class="xml" name="code"><!-- =============================单点登录配置开始================================= -->
<!-- 用于单点退出,该过滤器用于实现单点登出功能,通知其他应用单点登出 -->
<listener>
	<listener-class>org.jasig.cas.client.session.SingleSignOutHttpSessionListener</listener-class>
</listener>

<!-- 该过滤器用于实现单点登出功能,可选配置。 -->
<filter>
	<filter-name>CAS Single Sign Out Filter</filter-name>
	<filter-class>org.jasig.cas.client.session.SingleSignOutFilter</filter-class>
</filter>
<filter-mapping>
	<filter-name>CAS Single Sign Out Filter</filter-name>
	<url-pattern>/*</url-pattern>
</filter-mapping>

<!-- 该过滤器负责用户的认证工作,必须启用它 -->
<filter>
	<filter-name>CASFilter</filter-name>
	<filter-class>org.jasig.cas.client.authentication.AuthenticationFilter</filter-class>
	<init-param>
		<param-name>casServerLoginUrl</param-name>
		<param-value>http://10.61.41.152:8080/cas/login</param-value>
		<!--这里的server是服务端的IP -->
	</init-param>
	<init-param>
		<param-name>serverName</param-name>
		<param-value>http://10.61.41.152:8080</param-value>
	</init-param>
</filter>
<filter-mapping>
	<filter-name>CASFilter</filter-name>
	<url-pattern>/*</url-pattern>
</filter-mapping>

<!-- 该过滤器负责对Ticket的校验工作,必须启用它 -->
<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>http://10.61.41.152:8080/cas</param-value>
	</init-param>
	<init-param>
		<param-name>serverName</param-name>
		<param-value>http://10.61.41.152:8080</param-value>
	</init-param>
</filter>
<filter-mapping>
	<filter-name>CAS Validation Filter</filter-name>
	<url-pattern>/*</url-pattern>
</filter-mapping>

<!-- 该过滤器负责实现HttpServletRequest请求的包裹, 比如允许开发者通过HttpServletRequest的getRemoteUser()方法获得SSO登录用户的登录名,可选配置。 -->
<filter>
	<filter-name>CAS HttpServletRequest Wrapper Filter</filter-name>
	<filter-class>org.jasig.cas.client.util.HttpServletRequestWrapperFilter</filter-class>
</filter>
<filter-mapping>
	<filter-name>CAS HttpServletRequest Wrapper Filter</filter-name>
	<url-pattern>/*</url-pattern>
</filter-mapping>

<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 Assertion Thread Local Filter</filter-name>
	<url-pattern>/*</url-pattern>
</filter-mapping>
<!-- =============================单点登录配置结束================================= -->

有个要注意的地方,Cas20ProxyReceivingTicketValidationFilter这个过滤器的casServerUrlPrefix千万不能加login,如果加了就会报下面错误
java.lang.NullPointerException
	java.util.concurrent.ConcurrentHashMap.hash(ConcurrentHashMap.java:333)
	java.util.concurrent.ConcurrentHashMap.get(ConcurrentHashMap.java:988)
	org.jasig.cas.client.proxy.ProxyGrantingTicketStorageImpl.retrieve(ProxyGrantingTicketStorageImpl.java:85)
	org.jasig.cas.client.validation.Cas20ServiceTicketValidator.parseResponseFromServer(Cas20ServiceTicketValidator.java:91)
	org.jasig.cas.client.validation.AbstractUrlBasedTicketValidator.validate(AbstractUrlBasedTicketValidator.java:217)
	org.jasig.cas.client.validation.AbstractTicketValidationFilter.doFilter(AbstractTicketValidationFilter.java:169)
	org.jasig.cas.client.authentication.AuthenticationFilter.doFilter(AuthenticationFilter.java:116)
	org.jasig.cas.client.session.SingleSignOutFilter.doFilter(SingleSignOutFilter.java:76)

进行到这里基本的服务端跟客户端都已经配置完成

首次运行
重启Tomcat
浏览器打开http://10.61.41.152:8080/examples1可以看到进入了CAS登录页面
输入用户名密码后重定向回examples首页
浏览器打开http://10.61.41.152:8080/examples2还是进入CAS登陆页面
可以看出现在还不是单点登陆需要修改下服务端的Spring配置

修改配置
打开cas/WEB-INF/spring-configuration/ticketGrantingTicketCookieGenerator.xml
将ticketGrantingTicketCookieGenerator这个bean中的p:cookieSecure属性改为false让其支持http的单点登陆

再次运行
重启Tomcat
浏览器打开http://10.61.41.152:8080/examples1可以看到进入了CAS登录页面
输入用户名密码后重定向回examples首页
浏览器打开http://10.61.41.152:8080/examples2直接进入了examples首页
单点登陆环境搭建成功
发表评论
用户名: 匿名