Mvc4单点登录之四 配置Cas服务端,返回更多的用户信息!

        .Net单点登录详解
(SSO)

       Mvc4单点登录之一Cas简单介绍

       Mvc4单点登录之二 Cas server端配置

           Mvc4单点登录之三Cas
客户端配置

           前几篇博客大致的介绍了,cas的使用,在这篇博客当中,将为大家介绍一下如何配置服务端,让用户登录之后,返回更多的用户信息!

一、首先需要配置属性attributeRepository

首先,你需要到WEB-INF目录找到 deployerConfigContext.xml文件,同时配置
attributeRepository 如下:

<bean  class="org.jasig.services.persondir.support.jdbc.SingleRowJdbcPersonAttributeDao"id="attributeRepository">
        <constructor-argindex="0" ref="casDataSource"/>
        <constructor-argindex="1" value="select * from userinfo where {0}"/>
        <propertyname="queryAttributeMapping">
            <map>
                <entrykey="username" value="loginname"/>  // 这里的key需写username和登录页面一致,value对应数据库用户名字段
            </map>
        </property>
        <propertyname="resultAttributeMapping">
            <map>
// <!--key为对应的数据库字段名称,value为提供给客户端获取的属性名字,系统会自动填充值-->
                <entrykey="id" value="id"/>
                <entrykey="mobile" value="mobile"/>
                <entrykey="email" value="email"/>
            </map>
        </property>
    </bean>

其中:

切记:查询出来的字段名中间不能使用 _ (下划线),否则获取不到数据,如 cell_phone 需要 设置别名为 cellPhone.

queryAttributeMapping 是组装sql用的查询条件属性,上述配置后,结合封装成查询sql就是 select* from userinfo where loginname=#username#   resultAttributeMapping
是sql执行完毕后返回的结构属性, key对应数据库字段,value对应客户端获取参数。

如果要组装多个查询条件,需要加上下面这个,默认为AND

<property name="queryType">
          <value>OR</value>
</property> 

二、配置用户认证凭据转化的解析器

也是在 deployerConfigContext.xml 中,为UsernamePasswordCredentialsToPrincipalResolver 注入attributeRepository,那么 attributeRepository 就会被触发并通过此类进行解析,红色为新添部分。
<propertyname="credentialsToPrincipalResolvers">
            <list>
                <beanclass="org.jasig.cas.authentication.principal.UsernamePasswordCredentialsToPrincipalResolver">
                   <span style="color:#ff0000;"> <propertyname="attributeRepository" ref="attributeRepository"/></span>
                </bean>
                <beanclass="org.jasig.cas.authentication.principal.HttpBasedServiceCredentialsToPrincipalResolver"/>
            </list>
 </property>

三、修改 deployerConfigContext.xml中的 org.jasig.cas.services.InMemoryServiceRegistryDaoImpl属性 registeredServices

修改 registeredServices  列表中的每个协议中的
allowedAttributes 属性的值。列出的每个值,在客户端就可以访问了

<bean  id="serviceRegistryDao" class="org.jasig.cas.services.InMemoryServiceRegistryDaoImpl">
           <property name="registeredServices">
               <list>
                   <beanclass="org.jasig.cas.services.RegexRegisteredService">
                       <property name="id"value="0" />
                       <property name="name"value="HTTP and IMAP" />
                       <property name="description"value="Allows HTTP(S) and IMAP(S) protocols" />
                       <property name="serviceId"value="^(https?|imaps?)://.*" />
                       <propertyname="evaluationOrder" value="10000001" />
                       <propertyname="allowedAttributes"> // 客户端需要使用的对象的属性名称
                              <list>
                                      <value>uid</value>
                                      <value>email</value>
                                      <value>mobile</value>
                              </list>
                       </property>
                   </bean>
	      </list>
	</property>
</bean>

此步骤灰常重要,可以看看 org.jasig.cas.services.RegexRegisteredService的源码,其中的 allowedAttributes是关键

【提示】网上说此bean中的ignoreAttributes属性默认是不添加用户信息,查看了
CAS 3.5.2 版本的 AbstractRegisteredService 源码后,发现其默认值就是
false,即:添加属性后,客户端就可见了

四、修改casServiceValidationSuccess.jsp

路径:  WEB-INF/view/jsp/protocol/2.0/casServiceValidationSuccess.jsp

在server验证成功后,这个页面负责生成与客户端交互的xml信息,在默认的casServiceValidationSuccess.jsp中,只包括用户名,并不提供其他的属性信息,因此需要对页面进行扩展,如下,红色为新添加部分

<cas:serviceResponsexmlns: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:iftest="${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:iftest="${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>

通过这些配置,就可以在客户端获取到更多的返回的信息了!

时间: 2024-10-23 09:20:48

Mvc4单点登录之四 配置Cas服务端,返回更多的用户信息!的相关文章

Mvc4单点登录之二 Cas server端配置

上一篇博客Mvc4单点登录之一Cas简单介绍简单的介绍了cas的工作原理!这篇文章介绍一下Cas Server端的配置. 首先要说明Cas server 是一个java程序,所以首先要确定你的电脑上安装了JDK, 并且安装了Tomcat 服务器,如果不会装的话,那么可以从网上查一下资料,一把一把的!例如,我将tomcat安装在了E:\apache-tomcat-7.0.52. cas的下载地址 cas 客户端:  http://download.csdn.net/detail/zhanghong

SpringCloud系列九:SpringCloudConfig 基础配置(SpringCloudConfig 的基本概念、配置 SpringCloudConfig 服务端、抓取配置文件信息、客户端使用 SpringCloudConfig 进行配置、单仓库目录匹配、应用仓库自动选择、仓库匹配模式)

1.概念:SpringCloudConfig 基础配置 2.具体内容 通过名词就可以发现,SpringCloudConfig 核心作用一定就在于进行配置文件的管理上.也就是说为了更好的进行所有微服务的配置项的管理,在 SpringCloud 设计架构里面就考虑到了针对于所有的核心配置文件(application.yml)进行的一项统一管理的工具. 2.1.SpringCloudConfig 的基本概念 现在可以思考一个问题:在一个实际的项目开发过程之中,有可能会出现有上百个微服务(创建微服务的标

【试水CAS-4.0.3】第04节_CAS服务端通过数据库认证用户

本文源码下载:http://download.csdn.net/detail/jadyer/8911139 /** * @see ------------------------------------------------------------------------------------------------------------------------ * @see CAS服务端通过数据库认证用户 * @see 实现方式有两种,一是自己写数据库获取用户名密码再认证的类,一是借助C

cas sso单点登录系列2:cas客户端和cas服务端交互原理动画图解,cas协议终极分析

转:http://blog.csdn.net/ae6623/article/details/8848107 1)PPT流程图:ppt下载:http://pan.baidu.com/s/1o7KIlom 一.用户第一次访问web1应用. ps:上图少画了一条线,那一条线,应该再返回来一条,然后再到server端,画少了一步...谢谢提醒.而且,重定向肯定是从浏览器过去的.我写的不严谨,画的比较通俗了...因该像下面这张图一样就ok了!!PPT自己下载下来修改吧,我就不改了. 二.用户第一次访问we

Mvc4单点登录之三Cas 客户端配置

上一篇博客讲解了cas服务端的配置,这篇博客为大家讲一下cas 客户端的配置! 第一步建项目 自己新建一个mvc的项目.如图所示! 第二步添引用 将上一篇博客开头中让下载的文件,下载下来后,将dotnet-client-1.0.2-bin 文件中的 DotNetCasClient.dll文件复制到bin文件夹下,并添加DotNetCasClient.dll的引用. 第三步添视图 在Controller中 新建一个controller命名为HomeController,然后为里边的index添加一

Service系统服务(六):rsync基本用法、rsync+SSH同步、配置rsync服务端、访问rsync共享资源、使用inotifywait工具、配置Web镜像同步、配置并验证Split分离解析

一.rsync基本用法 目标: 本例要求掌握远程同步的基本操作,使用rsync命令完成下列任务: 1> 将目录 /boot 同步到目录 /todir 下   2> 将目录 /boot 下的文档同步到目录 /todir 下   3> 在目录 /boot 下新增文件 a.txt,删除 /todir 下的子目录 grub2,再次同步使 /todir 与 /boot 一致   4> 验证 -a.-n.-v.--delete 选项的含义 方案: 本地同步操作: rsync [选项...] 本

配置iSCSI 服务端

ISCSI服务端和客户端的操作系统以及IP地址 环境准备 主机名称: ISCSI服务端ISCSI客户端 操作系统: RHEL 7.3 IP地址: 服务端192.168.0.13客户端192.168.0.10 服务端配置过程 第一步:配置好Yum 软件仓库后安装iSCSI 服务端程序以及配置命令工具.通过在yum命令的后面添加-y 参数,在安装过程中就不需要再进行手动确认了: [root@linuxprobe ~]# yum -y install targetd targetcli 安装完成后启动

linux网络编程学习笔记之四 -----多线程并发服务端

相对于使用进程实现并发,用线程的实现更加轻量.每个线程都是独立的逻辑流.线程是CPU上独立调度运行的最小单位,而进程是资源分配的单位.当然这是在微内核的操作系统上说的,简言之这种操作系统的内核是只提供最基本的OS服务,更多参看点击打开链接 每个线程有它自己的线程上下文,包括一个唯一的线程ID(linux上实现为unsigned long),栈,栈指针,程序计数器.通用目的寄存器和条件码,还有自己的信号掩码和优先级.同一个进程里的线程共享这个进程的整个虚拟地址空间,包括可执行的程序文本.程序的全局

RHEL7 配置iscsi服务端并实现客户端自动开机挂载

环境:server 172.25.0.11 --iscsi server iqn:iqn.2016-02.com.example:server0client 172.25.0.10 --iscsi client iqn:iqn.2016-02.com.example:desktop0一.iscsi服务端配置 安装targetcli yum install targetcli -y 找一块磁盘挂载 [[email protected] ~]# targetcli --进入此命令配置iscsi服务端