cas单点登录怎么在服务器端获得用户信息

如题所述

第1个回答  2016-10-22
通过上述部署与配置,多个Web应用已经可以共用一个登录服务。但是,上述过程中作为CAS Client端的Web应用只取得了用户登录名称信息,而在实际应用中,Web应用往往需要获得登录用户更多的信息,例如会员等级、性别、住址等。要达到此目的,只需对Server端稍做修改即可实现。

1. 服务端配置及修改

假定上述存储用户信息的数据表userinfo中还包含一个名为address的用于存储用户地址的字段,而Web应用程序希望能够从CAS Server处获得当前登录用户的地址信息,则Server端需要按以下内容修改deployerConfigContext.xml。部分配置说明请参见注释。

<!--将原有attributeRepository配置注释 -->

<!--

<beanid="attributeRepository"

class="org.jasig.services.persondir.support.StubPersonAttributeDao">

<propertyname="backingMap">

<map>

<entrykey="uid" value="uid" />

<entrykey="eduPersonAffiliation" value="eduPersonAffiliation"/>

<entrykey="groupMembership" value="groupMembership" />

</map>

</property>

</bean>

-->

<!--新增attributeRepository配置(开始) -->

<bean class="org.jasig.services.persondir.support.jdbc.SingleRowJdbcPersonAttributeDao"id="attributeRepository">

<!-- 指定使用的数据源,此处dataSource是已配置好的数据源 -->

<constructor-arg index="0"ref="dataSource"/>

<!-- 从数据库中查询信息的SQL语句,通常只需要修改表名即可 -->

<constructor-arg index="1" value="select * fromuserinfo where {0}"/>

<propertyname="queryAttributeMapping">

<map>

<!-- 上述查询的参数,将userName替换为表中表示用户名的字段名称 -->

<entrykey="username" value="userName"/>

</map>

</property>

<propertyname="resultAttributeMapping">

<map>

<!-- 需要返回给Web应用的其它信息,多个信息时可继续增加entry节点-->

<!--key值为数据表中的字段名称,value值为Client端取值时的名称标识-->

<entry key="address" value="address"/>

</map>

</property>

</bean>

<!--新增attributeRepository配置(结束) -->

<bean

id="serviceRegistryDao"

class="org.jasig.cas.services.InMemoryServiceRegistryDaoImpl">

<propertyname="registeredServices">

<list>

<beanclass="org.jasig.cas.services.RegexRegisteredService">

<propertyname="id" value="0" />

<propertyname="name" value="HTTP and IMAP" />

<propertyname="description" value="Allows HTTP(S) and IMAP(S)protocols" />

<propertyname="serviceId" value="^(https?|imaps?)://.*" />

<propertyname="evaluationOrder" value="10000001" />

<!--增加此项配置 -->

<property name="ignoreAttributes" value="true"/>

</bean>

… …

</list>

</property>

</bean>

CASServer要将额外的信息传递至Client端,还需要修改完成信息组装的文件WEB-INF/view/jsp/protocol/2.0/casServiceValidationSuccess.jsp。casServiceValidationSuccess.jsp负责组装包含用户信息的XML,因此修改部分是将需要传递的额外信息加入到它最终生成的XML文件之中。具体修改如下:

<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:forEachvar="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 emptypgtIou}">

<cas:proxyGrantingTicket>${pgtIou}</cas:proxyGrantingTicket>

</c:if>

<c:if test="${fn:length(assertion.chainedAuthentications)> 1}">

<cas:proxies>

<c:forEachvar="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>

2. Java Client端取得更多用户信息

Java Client端不需要做任何修改就可以继续正常使用CAS服务,如果需要取得用户更多信息,可以通过AttributePrincipal对象取得Attribute列表(一个Map对象)后进行查询。

修改前述Java Client的示例代码,在最后追加取得address信息的代码,重启服务并重新访问页面,可以看到页面上显示了当前用户的address信息。
<%@pageimport="org.jasig.cas.client.authentication.AttributePrincipal" %>

<%@pageimport="org.jasig.cas.client.validation.Assertion" %>

<%@page import="java.util.*" %>

<%

String loginName1 = request.getRemoteUser();

%>

request.getRemoteUser(): <%=loginName1%><br/>

<%

AttributePrincipal principal = (AttributePrincipal)request.getUserPrincipal();

String loginName2 = principal.getName();

%>

request.getUserPrincipal().getName():<%=loginName2%><br/>

<%

Object object =request.getSession().getAttribute("_const_cas_assertion_");

Assertion assertion =(Assertion)object;

String loginName3 =assertion.getPrincipal().getName();

%>

request.getSession().getAttribute("_const_cas_assertion_").getPrincipal().getName():<%=loginName3%><br/>本回答被提问者采纳

cas单点登录怎么在服务器端获得用户信息
1. 服务端配置及修改 假定上述存储用户信息的数据表userinfo中还包含一个名为address的用于存储用户地址的字段,而Web应用程序希望能够从CAS Server处获得当前登录用户的地址信息,则Server端需要按以下内容修改deployerConfigContext.xml。部分配置说明请参见注释。<!--将原有attributeRepository配置注释 -->...

cas单点登录流程
第一步:访问cas过滤链接ssoLogin,拼凑定向到 CAS_SERVER 获取ticket的URL 第二步:CAS_SERVER校验用户信息,生成Ticket 第三步:重新定向到访问客户端的ssoLogin并附加Ticket参数和值 第四步:根据传来的Ticket拼凑定向到CAS_SERVER的连接去校验Ticket的合法性 第五步:CAS_SERVER校验成功后,会返回XML...

php Cas Client单点登录客户端 登录跳转逻辑
单点登录的实现原理在于,通过Cas Server统一认证中心进行账号密码验证,验证通过后返回给客户端用户信息。PHP Cas Client客户端在点击“统一身份认证登录”按钮后,跳转至Cas Server统一认证中心进行身份验证。验证通过后,Cas Server返回用户信息,客户端接收到信息后,需处理和维护用户的登录状态。常用的处理...

CAS单点登录原理分析(一)
认证系统将用户登录的信息记录到服务器的session中。 第三步 :认证系统给浏览器发送一个特殊的凭证ticket,浏览器将凭证交给应用系统1,应用系统1则拿着浏览器交给他的凭证ticket去认证系统验证凭证ticket是否有效。凭证ticket若是有效,将用户信息保存到应用系统1的session中一份,并告知应用系统1,用户通过认证。 第四步 ...

php Cas Client单点登录客户端 登录跳转逻辑
单点登录的实现依赖于Cas Server服务器和php Cas Client客户端,本文将解释在php环境中如何实现单点登录客户端的登录跳转逻辑。在第三方APP添加单点登录按钮后,点击该按钮将跳转至Cas Server统一认证中心。用户在Cas Server输入账号密码后,系统会回调至本地客户端,并通过该客户端获取登录用户信息。本地...

cas对接是什么意思?
4. 验证访问:应用程序访问需要登录的资源时,CAS客户端将会跳转到CAS服务器的登录页面,完成用户的认证和授权操作。5. 返回应用:用户认证成功后,CAS客户端将会返回一个票证(ticket),应用程序通过该票证可以获取用户的登录信息。实现单点登录:用户只需登录一次即可访问其他应用程序,提高了用户的使用...

CAS单点登录基本原理
一、几个概念 TGT(Ticket Grant Ticket):是cas服务端为用户签发的登录票据,封装了cookie和用户信息,有TGT代表用户已经登录过。TGC(Ticket Granting Cookie):可以理解成TGT的cookie,cookie的值就是TGT的ID。ST(service Ticket):cas服务端签发的访问某个服务的票据,server用TGT去签发ST 二、基本原理...

应用系统基于CAS实现单点登录
业务系统需同步组织用户数据,并确保登录标识字段与CAS服务保持一致。同步方式包括从门户或钉钉获取用户信息,或者通过自定义接口获取。业务系统集成CAS通常涉及引入CAS客户端包、配置CAS过滤器和调整退出逻辑。综上所述,基于CAS的单点登录集成和实现涉及多个步骤,包括架构理解、配置调整、服务部署和业务系统...

cas单点登录?
在项目开发阶段,使用Spring Initializr快速构建Spring Boot项目,并在pom.xml文件中添加依赖包,如hutool工具包用于远程调用接口。新建一个CallBackController接口,用于通过CAS的ticket获取用户信息。配置完成后,启动项目并访问http:\/\/localhost:9999,即可看到Authing登录窗口。输入用户名、密码进行登录后,用户...

DataEase 集成 CAS 实现用户单点登录
为了在DataEase中集成CAS,登录DataEase管理员界面,进入系统管理>系统配置>CAS设置,配置CAS服务地址、登录地址和回调地址。将默认登录方式改为CAS,以启用单点登录。访问DataEase时,系统会自动引导至CAS认证界面进行登录,确保顺利进入DataEase。如果您需要恢复到普通用户登录方式,可以访问特定地址并输入管理员...

相似回答