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登录成功返回用户更多信息相关推荐

  1. php会员到期怎么判断,织梦用php判断检测会员是否登录并返回会员相关信息

    织梦有自带的会员功能,只需开启就可以直接使用了. 但是我们经常是需要判断会员是否登录了的,如果登录了就显示会员相关信息,没有登录就提示登录.我们可以在php文件中写入以下代码,用以判断并调取会员数据. ...

  2. android 从新浪微博获取用户信息,Android授权登录新浪微博获取用户个人信息

    Android授权登录新浪微博获取用户个人信息 Android授权登录新浪微博获取用户个 人信息 一.准备工作 我们都知道,无论是分享到新浪微博,还是获取新浪微博的用户信息,都离不开一样东西,那就是新 ...

  3. cas服务器中如何存储用户信息,CAS3.5.2 Server登录后返回用户信息详细解决方案

    单点登录(Single Sign-On, 简称SSO)是目前比较流行的服务于企业业务整合的解决方案之一,SSO使得在多个应用系统中,用户只需要登录一次就可以访问所有相互信任的应用系统.大家在使用时CA ...

  4. cas登录成功什么意思_单点登录系统和CAS的简介

    ---恢复内容开始--- 什么是单点登录? 单点登录(Single Sign On),简称为SSO,是目前比较流行的企业业务整合的解决方案之一.SSO的定义是在多个应用系统中,用户只需要登录一次就可以 ...

  5. Android授权登录新浪微博获取用户个人信息

    转载请注明出处:http://blog.csdn.net/u010214991/article/details/49149793 记得第一次发博文的时候我写了一篇文章,题为" Android ...

  6. cas登录成功什么意思_你知道CAS单点登录系统吗

    单点登录(Single Sign On),简称为 SSO,是目前比较流行的企业业务整合的解决方案之一.SSO的定义是在多个应用系统中,用户只需要登录一次就可以访问所有相互信任的应用系统.我们目前的系统 ...

  7. 【PHP】抖音授权登录并获取用户公开信息(网页)

    抖音官方文档:https://open.douyin.com/platform/doc/OpenAPI-oauth2 抖音的官方文档和接口及其随意.... 调用流程包括: 第三方发起抖音授权登录请求, ...

  8. cas登录成功后不跳转成功页面_SpringSecurity用户登录成功后页面跳转原理剖析

    Spring Security 框架在用户成功登录后的处理逻辑,相对来说比较复杂,比较绕,下面我们就关键逻辑,进行相关分析. 首先,框架默认的 AuthenticationSuccessHandler ...

  9. Android开发之高德地图定位成功返回的定位信息

    /*** 定位监听*/AMapLocationListener locationListener = new AMapLocationListener() {@Overridepublic void ...

最新文章

  1. 跨域(Cross-Domain) AJAX for IE8 and IE9
  2. mysql+odbc+ado_MFC ado+mysql+odbc技术分享
  3. Linux IO 多路复用是什么意思?
  4. 断点下载 (记录上传、或下载的量
  5. The Seven Tools of Causal Inference, with Reflections on Machine Learning
  6. 小提琴1234567位置图解_小提琴入门指法(小提琴1234567位置图解)
  7. MIMO Radar
  8. UE5/C++ 基于GAS创建攻击伤害 5.1.1准备碰撞体
  9. IDEA的mysql报错[08S01] 解决办法
  10. Android实时音视频如何快速实现回声消除
  11. SDN:简述对各类SDN控制器的认识
  12. jstat命令查看jvm的GC情况
  13. 使用 Python 自动识别防疫二维码
  14. php-fpm status,使用php-fpm状态页观察当前的php-fpm状态
  15. xml文件基本格式与解析
  16. 蒲丰投针与蒙特卡洛模拟
  17. 假设检验:一个总体参数的检验、总体方差检验、两个总体参数的检验和两个总体方差的检验
  18. 如何一次通过CISSP考试
  19. 文本文件和二进制文件详解(转)
  20. 【MATLAB】按位运算(bit操作)总结

热门文章

  1. 托微软的福,谷歌把GitLab捧成了独角兽
  2. 怎样搞定机器学习里的数学?斯坦福高手教你具体问题具体分析
  3. CNN手把手维修攻略:你的网络不好好训练,需要全面体检
  4. 无监督学习才不是“不要你管”
  5. 算法眼中的世界是什么样子?他们用一些彩色方块画了出来
  6. 寒武纪讯飞京东等合搞AI芯片评测标准,作者包括陈云霁陈天石
  7. rsync + inotify数据同步
  8. 给特定的模拟器/设备实例发送命令
  9. div+css布局与seo的关系
  10. 竞彩足球混合过关赔率API调用示例代码