转自:
http://home.open-open.com/space-124-do-blog-id-791.html
Yale cas
是目前项目中用到最多的
SSO
整合方案,
cas
的原理在很多文章中都有所说明,这里就不再多进行叙述了,从实战出发,结合实际项目整合的经验是非常值得借鉴的,了解
cas
的同志们都知道,在
cas
提供的
demo
中,返回给客户端的用户信息很少,只有一个登录用户名,而在实际应用中,客户端需要知道更多的用户信息,比如用户的性别,年龄,爱好,地址,用户的分组,角色信息等等,那么,下面就给大家介绍
cas server3.4.2
如何给客户端返回更多的用户资料和信息。
一、
首先需要配置属性仓库
attributeRepository
,顾名思义,只用来存储相关的属性信息的,在领域分析模型中,就介绍了关于领域对象的资源库的概念,主要目的也是为了与客户程序解耦。首先,你需要到
WEB-INF
目录找到
deployerConfigContext.xml
文件,同时配置
attributeRepository
如下:
<bean
class="org.jasig.services.persondir.support.jdbc.SingleRowJdbcPersonAttributeDao" id="attributeRepository">
<constructor-arg index="0" ref="casDataSource"/>
<constructor-arg index="1" value="
select * from sec_user where {0}
"/>
<property name="queryAttributeMapping">
<map>
<entry key="username" value="user_iidd"/>
</map>
</property>
<property name="resultAttributeMapping">
<map>
<entry key="user_iidd" value="username"/>
<entry key="user_name" value="user_name"/>
<entry key="user_sex" value="user_sex"/>
</map>
</property>
</bean>
|
这里将进行说明一下,
SingleRowJdbcPersonAttributeDao
的构造函数需要提供两个参数,数据源
DataSource
和查询用户信息的
sql
。
public SingleRowJdbcPersonAttributeDao(DataSource ds, String sql)
{
super(ds, sql);
}
|
构造函数配置完成后,需要配置
queryAttributeMapping
和
resultAttributeMapping
,查询官方网站说明如下:
Property
|
Type
|
Default Value
|
|
queryAttributeMapping
|
Map<String, ?>
|
null
|
A Map
from attribute names used in the Map
to attribute names to use in the SQL. The values can be either String
or Collection<String> to use a single Map attribute under
multiple names as in the SQL. If set only Map attributes listed will be
used in the SQL. If not set all Map attributes are used as-is in the
SQL.
|
resultAttributeMapping
|
Map<String, ?>
|
null
|
A Map
from SQL result names to returned attribute names. The values can be
either String or Collection<String> to use a single SQL result
under multiple returned attributes. If set only SQL attributes listed
will be returned. If not set all SQL attributes will be returned.
|
其中
queryAttributeMapping
是组装
sql
用的查询条件属性,如下表中
结合
封装成查询
sql
就是
select * from sec_user where user_iidd=#username#
,
resultAttributeMapping
是
sql
执行完毕后返回的结构属性,
key
对应数据库字段,
value
对应客户端获取参数。
二、
配置用户认证凭据转化的解析器,也是在
deployerConfigContext.xml
中,找到
credentialsToPrincipalResolvers
,为
UsernamePasswordCredentialsToPrincipalResolver
注入
attributeRepository
,那么
attributeRepository
就会被触发并通过此类进行解析,红色为新添部分。
<property name="credentialsToPrincipalResolvers">
<list>
<bean
class="org.jasig.cas.authentication.principal.UsernamePasswordCredentialsToPrincipalResolver">
<property name="attributeRepository" ref="attributeRepository"/>
</bean>
<bean
class="org.jasig.cas.authentication.principal.HttpBasedServiceCredentialsToPrincipalResolver"/>
</list>
</property>
|
三、
修改
WEB-INF/view/jsp/protocol/2.0/casServiceValidationSuccess.jsp
,在
server
验证成功后,这个页面负责生成与客户端交互的
xml
信息,信息格式如下:
<cas:serviceResponse xmlns:cas='http://www.yale.edu/tp/cas'>
<cas:authenticationSuccess>
<cas:user>admin</cas:user>
<cas:attributes>
<cas:attribute>
<cas:name>userId</cas:name>
<cas:value>admin</cas:value>
</cas:attribute>
<cas:attribute>
<cas:name>userSex</cas:name>
<cas:value>M</cas:value>
</cas:attribute>
<cas:attribute>
<cas:name>userName</cas:name>
<cas:value>
系统管理员
</cas:value>
</cas:attribute>
</cas:attributes>
</cas:authenticationSuccess>
</cas:serviceResponse>
|
在默认的
casServiceValidationSuccess.jsp
中,只包括用户名
,并不提供其他的属性信息,因此需要对页面进行扩展,如下,红色为新添加部分:
<cas:serviceResponse xmlns:cas='http://www.yale.edu/tp/cas'>
<cas:authenticationSuccess>
<cas:user>${fn:escapeXml(assertion.chainedAuthentications[fn:length(assertion.chainedAuthentications)-1].principal.id)}</cas:user>
<c:if
test="${fn:length(assertion.chainedAuthentications[fn:length(assertion.chainedAuthentications)-1].principal.attributes)
> 0}">
<cas:attributes>
<c:forEach
var="attr"
items="${assertion.chainedAuthentications[fn:length(assertion.chainedAuthentications)-1].principal.attributes}">
<cas:attribute>
<cas:name>${fn:escapeXml(attr.key)}</cas:name>
<cas:value>${fn:escapeXml(attr.value)}</cas:value>
</cas:attribute>
</c:forEach>
</cas:attributes>
</c:if>
<c:if test="${not empty pgtIou}">
<cas:proxyGrantingTicket>${pgtIou}</cas:proxyGrantingTicket>
</c:if>
<c:if test="${fn:length(assertion.chainedAuthentications) > 1}">
<cas:proxies>
<c:forEach
var="proxy" items="${assertion.chainedAuthentications}"
varStatus="loopStatus" begin="0"
end="${fn:length(assertion.chainedAuthentications)-2}" step="1">
<cas:proxy>${fn:escapeXml(proxy.principal.id)}</cas:proxy>
</c:forEach>
</cas:proxies>
</c:if>
</cas:authenticationSuccess>
</cas:serviceResponse>
|
通过完成上面三个步骤的配置后,
server
端的工作就完成了,那么如何在客户端获取这些信息呢?下面进行说明:
获取远程用户
request.getRemoteUser()
获取其他信息
AttributePrincipal principal = (AttributePrincipal) request.getUserPrincipal(); Map attributes = principal.getAttributes();
|
备注:总体来说,
cas
的代码结构不是很完善,尤其是客户端,从
2.x
到
3.x
,代码结构基本是进行了翻天覆地的重构,另外获取客户端信息时,也是只有最新版本的
3.1.1
才支持,之前的版本是不支持的,请一定要注意。
分享到:
相关推荐
Yale CAS实现单点登陆的客户端源码和服务端源码,客户端cas-client-3.1.10代码和cas-server-3.4.2.1代码
"Yale CAS SSO JAVA Client" 是一个专为Java应用程序设计的身份验证服务,它利用了耶鲁大学开发的中央认证服务(Central Authentication Service, CAS)。CAS是一种开放源代码的单点登录(Single Sign-On, SSO)框架...
这篇文章将详细介绍如何部署Yale CAS Server以及如何在Java应用中使用cas-java-client 3.2进行集成。 首先,我们需要了解Yale CAS Server的部署过程。这通常包括以下几个步骤: 1. **环境准备**:确保你有一个适合...
"Yale CAS SSO DotNet Client" 是一个专为.NET框架设计的客户端库,用于集成耶鲁大学(Yale)的中央认证服务(Central Authentication Service, CAS)。CAS是一种开源的身份验证协议,它允许用户通过单一登录...
**Yale CAS(Central Authentication Service)是耶鲁大学开发的一款基于Web的身份验证系统,它允许用户通过单一登录(Single Sign-On, SSO)访问多个应用系统。本篇将详细探讨Yale CAS的最佳实践,包括环境准备、...
Yale Central Authentication Service (CAS) 是一个开源的身份验证框架,由耶鲁大学开发,主要用于实现单点登录(Single Sign-On, SSO)。SSO允许用户在一个系统上登录后,无需再次认证即可访问其他多个相互信任的...
【标题】"Yale CAS服务器端深度定制"主要涉及到的是CAS(Central Authentication Service)系统...通过这篇博文和提供的资源,开发者可以学习到如何根据具体需求调整和优化CAS服务器,以更好地服务于组织的信息化建设。
总的来说,通过在Tomcat服务器上部署Yale CAS,并进行相应的SSL配置,可以为多个Web应用提供安全、便捷的单点登录体验。这个过程涉及到了Web容器的管理、SSL证书的生成和配置,以及客户端过滤器的设定,是实现SSO的...
总之,Yale CAS是一个强大的工具,它提供了SSO解决方案,使得用户能够在多个应用间无缝切换,同时也为管理员和开发者带来了高效、安全的身份验证管理方式。了解和掌握CAS的原理与实施,对于构建和维护复杂IT环境中的...
Yale CAS 是耶鲁大学开发的一种开源的单点登录(SSO)解决方案,提供了一个通用的身份验证框架,允许用户使用单个身份验证来访问多个应用程序。CAS 服务器充当着身份验证服务器的角色,负责验证用户的身份,生成 ...
本文将深入探讨如何将Yale CAS与Apache Shiro进行整合,以构建更高效、安全的Web应用。 CAS是由耶鲁大学开发的一个开放源码的单一登录(Single Sign-On, SSO)系统,旨在简化用户身份验证过程,让用户只需一次登录...
解决普元EOS报错:edu.yale.its.tp.cas.client.IContextInit 下载后需jar到lib里面且单击右键在属性一栏的弹出框内添加该jar包即可解决爆粗
单点登录(Single Sign-On,简称SSO)是一种用户身份验证机制,允许用户在一个安全领域内访问多个应用系统,而无需多次输入身份验证信息。在税务行业信息化发展中,应用整合成为关键,SSO作为其核心组成部分,对于...
8. **Yale大学**:CAS最初由耶鲁大学开发并开源,现在已成为一个广泛使用的标准,有许多社区维护的实现,如Apereo CAS,它提供了更多的特性和扩展。 通过理解和应用这些知识点,开发者可以有效地利用CAS客户端...
软件介绍: ...下载后先解压,然后将sso-client-java-7.0.8.jar文件复制到lib里面,鼠标单击右键在属性一栏的弹出框内添加该jar包即可解决解决普元EOS报错问题:edu.yale.its.tp.cas.client.IContextInit
Extended Yale B数据库的目的是进一步探索光照、表情和姿态等因素对人脸识别的挑战,其更复杂的数据结构使得模型能更好地理解和适应现实世界的复杂性。 这两个数据库的文件名通常包含了特定的信息,如类别编号和...
4. **解析响应**:成功响应会返回TGT信息,例如: ``` {"ticket":"TGT-1-Uxi0hyRmMcyUDmKuPOcriBs1WlW3UMGH9t9JVaL9EZ1nxka91S-cas01.example.org"} ``` #### 五、获取ST 获得TGT后,可以进一步获取ST,用于...