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();
分享到:
相关推荐
CAS客户端则负责与CAS服务器进行交互,验证用户的身份。 整合Spring、Spring Web MVC和CAS客户端的步骤如下: 1. **配置Spring**:创建Spring配置文件(如`applicationContext.xml`),声明必要的bean,包括数据源...
2. 初始化CAS客户端,可以选择是否启用调试模式以获取更多信息。 3. 使用`phpCAS::client()`方法创建CAS客户端实例。 4. 调用`phpCAS::forceAuthentication()`或`phpCAS::checkAuthentication()`来触发或检查用户的...
1. **安装CAS客户端库**:通常,我们可以通过NuGet包管理器安装`Castle.Services.Ticket`或`CasClient2`等CAS客户端库。 2. **配置web.config**:在项目的web.config文件中添加相应的CAS配置节。这包括设置CAS...
cas4.2.7服务端+cas客户端+示例程序+环境搭建之客户端war包 一切跑不起来的程序和走不通的...该客户端的这个URL还演示了如何调用cas服务端获取当前登录用户的相关信息(由服务端负责从数据库中读取后返回给cas客户端)。
CAS(Central Authentication Service)是一种基于Web的单一登录(Single Sign-On, SSO)协议,它允许用户通过一个统一的身份验证入口点登录,然后在多个应用系统间自由切换,而无需再次进行身份验证。这个给定的...
CAS客户端是实现与CAS服务器交互的关键部分,它允许用户通过CAS服务器进行身份验证,而无需在每个应用中单独登录。 在深入探讨CAS客户端之前,我们先理解一下SSO的概念。SSO允许用户通过一次登录就能访问多个相互...
这三个库文件共同构成了CAS客户端的基础,使得应用程序能够与CAS服务器进行通信,完成用户身份验证,并提供日志记录功能,以追踪应用程序的行为。在开发基于CAS的Java应用时,这些库是不可或缺的依赖项,需要正确地...
在这个过程中,我们使用Pac4J的CasClient来处理请求,获取并验证ticket,然后将用户信息返回给客户端,完成认证过程。 5. 用户认证流程优化:通过上述配置,用户在访问受保护的REST接口时,不会被重定向到CAS服务器...
将CAS的认证结果与Shiro的授权结合,通常在CAS验证成功后,会将用户的认证信息(如用户名、票证)传递给Shiro,Shiro再通过Realm从数据源中获取用户的角色和权限信息。这样,Shiro就可以根据这些信息进行权限控制,...
**Spring Security集成CAS客户端实例详解** 在Web应用中,安全是至关重要的,Spring Security和CAS(Central Authentication Service)是两种广泛使用的安全框架。本实例旨在展示如何将Spring Security与CAS结合,...
PHP CAS客户端是用于PHP应用程序的库,它允许开发者集成CAS服务,使得用户在访问多个受保护的应用时只需要进行一次登录。下面将详细介绍CAS协议、PHP CAS客户端以及如何使用它。 1. CAS协议简介: CAS是一种开放...
CAS客户端在SSO中扮演的角色是,当用户尝试访问受保护资源时,它会重定向到CAS服务器进行身份验证,验证成功后返回一个服务票证,客户端再用这个票证换取访问权限。 3. **CAS客户端配置**:安装和配置CAS客户端通常...
3. CAS Server 验证凭证,如果成功,则生成一个票据(Ticket)并返回给用户。 4. 用户将票据传递给服务提供者。 5. 服务提供者拿着票据向 CAS Server 验证。 6. CAS Server 验证票据有效后,服务提供者允许用户访问...
首先,CAS客户端3.5是为Java应用程序设计的,它允许这些应用与CAS服务器进行通信,验证用户身份,并处理登录和登出流程。这个版本的客户端支持Java Servlet 2.5及更高版本,兼容多种Web容器,如Tomcat、Jetty等。 ...
通过以上步骤,你可以使CAS客户端应用支持自定义登录页面,从而提供更个性化的用户体验。记住,每个CAS服务器的实现和配置可能会有所不同,因此在实际操作中需要根据具体情况进行调整。同时,为了确保安全性,务必...
3. **phpCasClient.zip**:这是一个完整的PHP CAS客户端库,可能包含了更多用于处理CAS操作的类和文件。解压缩后,这个库可以被引入到项目中,为开发者提供更丰富的API和示例,以便更好地集成CAS服务。 在支持PHP 5...
如果验证成功,CAS会返回一个票据(Ticket),用户带着这个票据回到原始应用,应用通过向CAS服务器验证该票据来确认用户身份,从而允许用户访问。 **配置CAS客户端** 1. **添加依赖**:在你的项目中,你需要引入...
- CAS客户端会处理从服务器返回的验证响应,如果成功,将在应用中创建或更新用户会话。 - 之后,用户在访问其他受保护的资源时,会自动通过已建立的SSO会话进行身份验证,无需再次登录。 5. **测试与调试**: - ...
4. **扩展CAS服务端**:为了返回更多用户信息,可能需要对CAS服务器进行扩展,比如使用自定义的UserDetailsService或AuthenticationManager。这些组件可以让服务端根据用户凭证查询数据库或其他数据源,获取额外的...
在IT行业中,单点登录(Single Sign-On, SSO)是一种常见的身份验证机制,它允许用户在一个系统上登录后,无需再次认证即可访问其他多个相互信任的系统。本项目是关于如何将CAS(Central Authentication Service)与...