cas登录成功返回用户更多信息
cas 3.4登录成 功返回用户更多信息。
cas登录成功默认返回的只有用户名,
java客户端获取:
AttributePrincipal principal = (AttributePrincipal) request.getUserPrincipal();
String username = principal.getName();
php客户端获取
$username=phpCAS::getUser();
我们的程序中也可能遇到需要得到更多如姓名,手机号,email等更多用户信息的情况。cas
各种版本配置方式也不尽相同,这里讲的是目前最新版本3.4.4。配置方式如下,
一、首先需要配置属性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 userinfo where {0}"/>
<property name="queryAttributeMapping">
<map>
//这里的key需写username,value对应数据库用户名字段
<entry key="username" value="loginname"/>
</map>
</property>
<property name="resultAttributeMapping">
<map>
<entry key="id" value="id"/>
<entry key="mobile" value="mobile"/>
<entry key="email" value="email"/>
</map>
</property>
</bean>
其中queryAttributeMapping是组装sql用的查询条件属性,如下表中
结合 封装成查询sql就是select * from userinfo where loginname=#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信息,在默认的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:${fn:escapeXml(attr.key)}>${fn:escapeXml(attr.value)}</cas:${fn:escapeXml(attr.key)}>
</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端的工作就完成了,那么如何在客户端获取这些信息呢?下面进行说明:
java客户端获取:
AttributePrincipal principal = (AttributePrincipal) request.getUserPrincipal();
Map attributes = principal.getAttributes();
String email=attributes .get("email");
php客户端;
$email=phpCAS::getAttribute('email');
这里补充一下,实现返回功能的attributeRepository在person-directory-impl-1.5.0-RC6.jar这个jar包中,其中执行查询的在类org.jasig.services.persondir.support.jdbc.AbstractJdbcPersonAttributeDao.java中,如果对返回值有其他要求,比如我的就是需要调用webservice获取返回值可以在这个文件封装自己的返回值,或者修改查询条件。
List results = this.simpleJdbcTemplate.query(querySQL, rowMapper, params);
//List中results 中保存的对象为Map<String,Object>类型的所以自定义
// Map<String, Object> map=new HashMap<String, Object>();
// map.put("ID", 3);
// map.put("LOGINNAME", "allen");
// map.put("PASSWORD","123456");
// map.put("ADDTIME", "2010-11-29 00:00:00.0");
// map.put("STATE", 0);
// map.put("MOBILE", "123456789");
// map.put("EMAIL", test@126.com);
// results.add(map);
return parseAttributeMapFromResults(results, queryUserName);
写在最后,若按照以上配置还是不能获得返回值的话,我通过调试源码发现把源码中
org.jasig.cas.CentralAuthenticationServiceImpl.java 编译后再cas-server-core-3.4.4.jar中的第360-368行代码给注释掉就ok了,
360// for (final String attribute : registeredService
361// .getAllowedAttributes()) {
362// final Object value = principal.getAttributes().get(
363// attribute);
364//
365// if (value != null) {
366// attributes.put(attribute, value);
367// }
368// }
转载于:https://www.cnblogs.com/tiantiantianlan/p/3184480.html
cas登录成功返回用户更多信息相关推荐
- php会员到期怎么判断,织梦用php判断检测会员是否登录并返回会员相关信息
织梦有自带的会员功能,只需开启就可以直接使用了. 但是我们经常是需要判断会员是否登录了的,如果登录了就显示会员相关信息,没有登录就提示登录.我们可以在php文件中写入以下代码,用以判断并调取会员数据. ...
- android 从新浪微博获取用户信息,Android授权登录新浪微博获取用户个人信息
Android授权登录新浪微博获取用户个人信息 Android授权登录新浪微博获取用户个 人信息 一.准备工作 我们都知道,无论是分享到新浪微博,还是获取新浪微博的用户信息,都离不开一样东西,那就是新 ...
- cas服务器中如何存储用户信息,CAS3.5.2 Server登录后返回用户信息详细解决方案
单点登录(Single Sign-On, 简称SSO)是目前比较流行的服务于企业业务整合的解决方案之一,SSO使得在多个应用系统中,用户只需要登录一次就可以访问所有相互信任的应用系统.大家在使用时CA ...
- cas登录成功什么意思_单点登录系统和CAS的简介
---恢复内容开始--- 什么是单点登录? 单点登录(Single Sign On),简称为SSO,是目前比较流行的企业业务整合的解决方案之一.SSO的定义是在多个应用系统中,用户只需要登录一次就可以 ...
- Android授权登录新浪微博获取用户个人信息
转载请注明出处:http://blog.csdn.net/u010214991/article/details/49149793 记得第一次发博文的时候我写了一篇文章,题为" Android ...
- cas登录成功什么意思_你知道CAS单点登录系统吗
单点登录(Single Sign On),简称为 SSO,是目前比较流行的企业业务整合的解决方案之一.SSO的定义是在多个应用系统中,用户只需要登录一次就可以访问所有相互信任的应用系统.我们目前的系统 ...
- 【PHP】抖音授权登录并获取用户公开信息(网页)
抖音官方文档:https://open.douyin.com/platform/doc/OpenAPI-oauth2 抖音的官方文档和接口及其随意.... 调用流程包括: 第三方发起抖音授权登录请求, ...
- cas登录成功后不跳转成功页面_SpringSecurity用户登录成功后页面跳转原理剖析
Spring Security 框架在用户成功登录后的处理逻辑,相对来说比较复杂,比较绕,下面我们就关键逻辑,进行相关分析. 首先,框架默认的 AuthenticationSuccessHandler ...
- Android开发之高德地图定位成功返回的定位信息
/*** 定位监听*/AMapLocationListener locationListener = new AMapLocationListener() {@Overridepublic void ...
最新文章
- 跨域(Cross-Domain) AJAX for IE8 and IE9
- mysql+odbc+ado_MFC ado+mysql+odbc技术分享
- Linux IO 多路复用是什么意思?
- 断点下载 (记录上传、或下载的量
- The Seven Tools of Causal Inference, with Reflections on Machine Learning
- 小提琴1234567位置图解_小提琴入门指法(小提琴1234567位置图解)
- MIMO Radar
- UE5/C++ 基于GAS创建攻击伤害 5.1.1准备碰撞体
- IDEA的mysql报错[08S01] 解决办法
- Android实时音视频如何快速实现回声消除
- SDN:简述对各类SDN控制器的认识
- jstat命令查看jvm的GC情况
- 使用 Python 自动识别防疫二维码
- php-fpm status,使用php-fpm状态页观察当前的php-fpm状态
- xml文件基本格式与解析
- 蒲丰投针与蒙特卡洛模拟
- 假设检验:一个总体参数的检验、总体方差检验、两个总体参数的检验和两个总体方差的检验
- 如何一次通过CISSP考试
- 文本文件和二进制文件详解(转)
- 【MATLAB】按位运算(bit操作)总结