`
lym6520
  • 浏览: 695459 次
  • 性别: Icon_minigender_1
  • 来自: 福建
社区版块
存档分类
最新评论

CAS 客户端验证成功获取更多用户信息

阅读更多
cas客户端需要获取更多的用户信息,需要对cas server做下修改,以支持返回更多属性信息

1.修改WEB-INF/deployerConfigContext.xml配置文件
找到id="authenticationManager" 的bean,为属性credentialsToPrincipalResolvers增加自定义bean,该bean需实现org.jasig.cas.authentication.principal.CredentialsToPrincipalResolver接口:
<property name="credentialsToPrincipalResolvers">
    <list>
        <!--add ,返回客户端更多认证信息, linym, 2014-06-10-->
        <bean id="userAttributeRepository" class="com.*.*.UserAttributeRepository" />


         ...

    </list>

</property>
public class UserAttributeRepository implements CredentialsToPrincipalResolver {
    public Principal resolvePrincipal(Credentials credentials) {
        String principalId = extractPrincipalId(credentials);
        final Map attributes = new HashMap();
        //这些属性通过 request 获取
        HttpServletRequest request = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest();
        LoginLogBean logBean = new LoginLogBean(request);
        attributes.put("mac", logBean.getMac());
        attributes.put("ip", logBean.getIp());
        attributes.put("source", logBean.getSource());
        attributes.put("service", logBean.getService());
         
        attributes.put("field1", request.getAttribute("field1")); 

        return new SimplePrincipal(principalId, attributes);
    }

    public boolean supports(Credentials credentials) {
        return credentials != null;
    }
    protected String extractPrincipalId(final Credentials credentials) {
        final UsernamePasswordCredentials usernamePasswordCredentials = (UsernamePasswordCredentials) credentials;
        return usernamePasswordCredentials.getUsername();
    }

}


接下来需要修改WEB-INF/view/jsp/protocol/2.0/casServiceValidationSuccess.jsp增加返回客户端的属性内容
<%@ page session="false" %><%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %><%@ taglib uri="http://java.sun.com/jsp/jstl/functions" prefix="fn" %><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>

以上红色字体为新增部分。


解下来客户端调用获取设置的属性信息:
 Map attrMap = ((AttributePrincipal) request.getUserPrincipal()).getAttributes();
分享到:
评论

相关推荐

    cas4.2.7服务端+cas客户端+示例程序+环境搭建之客户端war包

    cas4.2.7服务端+cas客户端+示例程序+环境搭建之客户端war包 一切跑不起来的程序和走不通的...该客户端的这个URL还演示了如何调用cas服务端获取当前登录用户的相关信息(由服务端负责从数据库中读取后返回给cas客户端)。

    phpCAS:Apereo PHP CAS客户端

    请访问Wiki网站以获取更多信息: 可以在以下位置找到Api文档: 执照 Apereo基金会版权所有2007-2020。 该项目包括由Apereo Foundation开发的软件。 根据Apache许可证2.0版(“许可证”)获得许可; 除非遵守许可...

    CAS服务端(非原生)

    对CAS的服务端进行改造,改造时使用了Maven来管理代码。此次改造实现了自定义登录验证、向客户端传输更多用户信息、登出允许携带参数等功能。应用中用到的Oframer请至我的资源中下载。

    jasig-cas-rest-client:Jasig CAS(中央身份验证服务 http)的一个非常基本的 REST 客户端

    Jasig CAS REST 客户端 Jasig CAS(中央身份验证服务)的一个非常基本的 REST...设置支持 REST 的 Jasig CAS 实例后(有关更多信息,请访问 ),相应地更改 config/Config.js 文件. 插入要验证的“用户名”和“密码”。

    Roller4.0的另外一套cas简单解决方案

    对于cas的单点集成就更是少的可怜.我试验了一下roller自带的security.xml配置的cas方案.简直报错的夸张.根本没发用.roller使用的是acegi的用户验证框架.我自己下了一套acegi配置了一下.成功了.同样的方法放到roller...

    meteor-accounts-cas:用于CAS集成的流星包

    细节请参阅上面的链接以获取更多详细信息,以下介绍了此软件包已更改的一些项目。 当客户端调用Meteor.loginWithCas时,如果发生错误,则回调将出现Meteor.Error。 如果此错误的details属性是userDoesNotExist,则在...

    CAS-integration:Openroad CAS 集成

    欲了解更多信息,请访问: 。 是 Web 应用程序验证用户的标准机制。 CAS提供企业单点登录服务: 一个开放且有据可查的协议 一个开源的 Java 服务器组件 用于 Java、.Net、PHP、Perl、Apache、uPortal 等的客户端...

    openshift-cas-quickstart:用于在 Tomcat 7 (JBoss EWS 2.0) 下运行 Apereo CAS 的 Openshift 快速入门

    有关 Maven Overlay 的更多信息,请访问 在 openshift 上运行 通过rhc客户端创建应用程序rhc app create cas jbossews-2.0 --from-code https://github.com/adrianchia/openshift-cas-quickstart.git 或从 ...

    spring security 参考手册中文版

    32.3 CAS客户端的配置 244 32.3.1服务票据认证 244 32.3.2单一注销 246 32.3.3使用CAS认证无状态服务 249 配置CAS以获取代理授予票证 249 使用代理票证调用无状态服务 250 32.3.4代理票证认证 251 33. X.509认证 253...

    Spring Security 中文教程.pdf

    4.3. 更多信息 II. 结构和实现 5. 技术概述 5.1. 运行环境 5.2. 核心组件 5.2.1. SecurityContextHolder, SecurityContext 和 Authentication对象 5.2.1.1. 获得当前用户的信息 5.2.2. ...

    SpringSecurity 3.0.1.RELEASE.CHM

    4.3. 更多信息 II. 结构和实现 5. 技术概述 5.1. 运行环境 5.2. 核心组件 5.2.1. SecurityContextHolder, SecurityContext 和 Authentication对象 5.2.1.1. 获得当前用户的信息 5.2.2. UserDetailsService ...

    Spring Security-3.0.1中文官方文档(翻译版)

    4.3. 更多信息 II. 结构和实现 5. 技术概述 5.1. 运行环境 5.2. 核心组件 5.2.1. SecurityContextHolder, SecurityContext 和Authentication 对象 5.2.1.1. 获得当前用户的信息 5.2.2. ...

    JAVA上百实例源码以及开源项目源代码

     当用户发送第一次请求的时候,验证用户登录,创建一个该qq号和服务器端保持通讯连接得线程,启动该通讯线程,通讯完毕,关闭Scoket。  QQ客户端登录界面,中部有三个JPanel,有一个叫选项卡窗口管理。还可以更新...

    JAVA上百实例源码以及开源项目

     当用户发送第一次请求的时候,验证用户登录,创建一个该qq号和服务器端保持通讯连接得线程,启动该通讯线程,通讯完毕,关闭Scoket。  QQ客户端登录界面,中部有三个JPanel,有一个叫选项卡窗口管理。还可以更新...

    java开源包1

    3、连接复用,因此在多线程获取连接时无需阻塞; 4、同步调用; 5、超时机制; 6、支持多种通信框架(Mina/Netty/Grizzly),支持多种序列化/反序列化(Java/Hessian/PB); 7、支持自定义通信协议,可完全替换...

    java开源包11

    3、连接复用,因此在多线程获取连接时无需阻塞; 4、同步调用; 5、超时机制; 6、支持多种通信框架(Mina/Netty/Grizzly),支持多种序列化/反序列化(Java/Hessian/PB); 7、支持自定义通信协议,可完全替换...

    java开源包2

    3、连接复用,因此在多线程获取连接时无需阻塞; 4、同步调用; 5、超时机制; 6、支持多种通信框架(Mina/Netty/Grizzly),支持多种序列化/反序列化(Java/Hessian/PB); 7、支持自定义通信协议,可完全替换...

    java开源包3

    3、连接复用,因此在多线程获取连接时无需阻塞; 4、同步调用; 5、超时机制; 6、支持多种通信框架(Mina/Netty/Grizzly),支持多种序列化/反序列化(Java/Hessian/PB); 7、支持自定义通信协议,可完全替换...

    java开源包6

    3、连接复用,因此在多线程获取连接时无需阻塞; 4、同步调用; 5、超时机制; 6、支持多种通信框架(Mina/Netty/Grizzly),支持多种序列化/反序列化(Java/Hessian/PB); 7、支持自定义通信协议,可完全替换...

Global site tag (gtag.js) - Google Analytics