`
zjnbshifox
  • 浏览: 316012 次
  • 性别: Icon_minigender_1
  • 来自: 宁波
社区版块
存档分类
最新评论

CAS 客户端获取Credentials额外信息

    博客分类:
  • Java
阅读更多
服务端的配置
1、在deployerContext.xml中加上attributeRepository
<bean
					class="org.jasig.cas.authentication.principal.UsernamePasswordCredentialsToPrincipalResolver">
					<property name="attributeRepository" ref="attributeRepository" />
				</bean>


2、配置,这里配置需要从数据库读取的属性,这里参考了这篇http://zxs19861202.iteye.com/blog/890965
<bean id="attributeRepository"
		class="org.jasig.services.persondir.support.jdbc.SingleRowJdbcPersonAttributeDao">
		<constructor-arg index="0" ref="dataSource" />
		<constructor-arg index="1"
			value="select id,email,name  from t_admin_user where  {0} " />
		<property name="queryAttributeMapping">
			<map>
				<entry key="username" value="login_name" />
			</map>
		</property>
		<!-- 要获取的属性在这里配置 -->
		<property name="resultAttributeMapping">
			<map>
				<entry key="email" value="email" />
				<entry key="name" value="name" />
			</map>
		</property>
	</bean>


3、另外由于我用的是http协议,所以还需要配置serviceRegistryDao,让attributeRepository返回信息
  <bean id="serviceRegistryDao" class="org.jasig.cas.services.InMemoryServiceRegistryDaoImpl">
		<property name="registeredServices">
			<list>
				<bean class="org.jasig.cas.services.RegexRegisteredService">
					<property name="id" value="0" />
					<property name="name" value="HTTP" />
					<property name="description" value="Only Allows HTTP Urls" />
					<property name="serviceId" value="^http://.*" />
					<property name="evaluationOrder" value="10000001" />
					<property name="ignoreAttributes" value="true" />
				</bean>
</property>
//...
</bean>

4、最后在/WEB-INF/view/jsp/protocol/2.0/casServiceValidationSuccess.jsp的<cas:user></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}"
						varStatus="loopStatus" begin="0"
						end="${fn:length(assertion.chainedAuthentications[fn:length(assertion.chainedAuthentications)-1].principal.attributes)}"
						step="1">
						<cas:attribute>
							<cas:${fn:escapeXml(attr.key)}>${fn:escapeXml(attr.value)}</cas:${fn:escapeXml(attr.key)}>
						</cas:attribute>
					</c:forEach>
				</cas:attributes>
			</c:if>


下面是服务端的配置,主要是web.xml
<!DOCTYPE web-app PUBLIC
 "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
 "http://java.sun.com/dtd/web-app_2_3.dtd" >

<web-app>
	<display-name>Archetype Created Web Application</display-name>

	<filter>
		<filter-name>CAS Authentication Filter</filter-name>
		<filter-class>org.jasig.cas.client.authentication.AuthenticationFilter</filter-class>
		<init-param>
			<param-name>casServerLoginUrl</param-name>
			<param-value>http://sso.nbrc.com.cn:8080/cas/login</param-value>
		</init-param>
		<init-param>
			<param-name>serverName</param-name>
			<param-value>http://localhost:8080</param-value>
		</init-param>
	</filter>

	<filter>
		<filter-name>CAS Validation Filter</filter-name>
		<filter-class>org.jasig.cas.client.validation.Cas20ProxyReceivingTicketValidationFilter</filter-class>
		<init-param>
			<param-name>casServerUrlPrefix</param-name>
			<param-value>http://sso.nbrc.com.cn:8080/cas</param-value>
		</init-param>
		<init-param>
			<param-name>serverName</param-name>
			<param-value>http://localhost:8080</param-value>
		</init-param>
		<init-param>
			<param-name>proxyReceptorUrl</param-name>
			<param-value>/proxyCallback</param-value>
		</init-param>
		<init-param>
			<param-name>proxyCallbackUrl</param-name>
			<param-value>http://localhost:8080/client/proxyCallback</param-value>
		</init-param>
	</filter>

	<filter>
		<filter-name>CAS HttpServletRequest Wrapper Filter</filter-name>
		<filter-class>org.jasig.cas.client.util.HttpServletRequestWrapperFilter</filter-class>
	</filter>

	<filter>
		<filter-name>CAS Assertion Thread Local Filter</filter-name>
		<filter-class>org.jasig.cas.client.util.AssertionThreadLocalFilter</filter-class>
	</filter>
	
	<filter-mapping>
		<filter-name>CAS Validation Filter</filter-name>
		<url-pattern>/proxyCallback</url-pattern>
	</filter-mapping>
	
		<filter-mapping>
		<filter-name>CAS Authentication Filter</filter-name>
		<url-pattern>/*</url-pattern>
	</filter-mapping>
	
	<filter-mapping>
		<filter-name>CAS Validation Filter</filter-name>
		<url-pattern>/*</url-pattern>
	</filter-mapping>
	<filter-mapping>
		<filter-name>CAS HttpServletRequest Wrapper Filter</filter-name>
		<url-pattern>/*</url-pattern>
	</filter-mapping>	
	<filter-mapping>
		<filter-name>CAS Assertion Thread Local Filter</filter-name>
		<url-pattern>/*</url-pattern>
	</filter-mapping>

<listener>
		<listener-class>org.jasig.cas.client.session.SingleSignOutHttpSessionListener</listener-class>
	</listener> 

</web-app>


获取信息的代码
<%
AttributePrincipal pr = (AttributePrincipal) request.getUserPrincipal();
out.println(pr.getName());

out.println(pr.getAttributes().get("email"));
out.println("<hr/>");
out.println(AssertionHolder.getAssertion().getPrincipal().getName());
Map<String,Object> attrs = AssertionHolder.getAssertion().getPrincipal().getAttributes();
for(Map.Entry<String,Object> keyset:attrs.entrySet()){
	out.print(keyset.getKey() + ":" + keyset.getValue() + "<br/>");
}
%>
分享到:
评论

相关推荐

    .net core IDEntityServer4客户端模式(Client Credentials)

    IdentityServer4客户端模式(Client Credentials),项目分为身份授权服务、客户端、被访问资源。客户端通过密钥向授权服务器请求AccessToken,客户端携带AccessToken向有身份验证的资源获取数据。

    CAS单点登录 CODE+讲解

    由于登录界面发生改变,请求参数增加了账号所在的系统名称,所以,登录凭据也不能继续使用UsernamePasswordCredentials,而是要自定义一个包含了系统名称的Credentials,并进行配置让CAS服务器启用这个自定义的...

    cas

    压缩包子文件的文件名“credential”可能指的是凭证(credentials),这是CAS认证过程中的重要概念。凭证可以是用户名和密码、数字证书或其他形式的身份证明,它们用于验证用户身份。在CAS中,处理和验证这些凭证是...

    cas client cas server

    - **bindAndValidate**: 收集用户在登录页面输入的信息,并封装成 CAS 内部的 `Credentials` 对象。 - **submit**: 调用 `centralAuthenticationService` 的 `grantServiceTicket` 方法来完成认证工作。如果认证成功...

    根据foxmail或其他客户端获取邮箱密码

    这时,如果使用过如Foxmail这样的...总的来说,获取邮箱密码需要对计算机存储和邮件客户端的工作原理有一定了解,同时也需要注意隐私和安全问题。在没有专业知识的情况下,最安全的方式往往是直接联系邮箱服务提供商。

    credentials-java-0.2.4.jar

    credentials-java-0.2.4.jar

    cas单点登录系统

    CASServer负责完成对用户的认证工作,CASServer需要独立部署,CASServer处理用户名/密码等凭证(Credentials)验证,它可能会到数据库检索一条用户帐号信息,也可能在XML文件中检索用户密码,CAS均提供一种灵活但统一...

    acegi集成CAS示例

    - **配置CAS客户端**:首先,需要在AceGI的配置中添加对CAS的支持,这通常涉及到在`applicationContext-security.xml`文件中引入CAS的客户端组件,并配置CAS服务器的URL、服务验证URL等。 - **处理服务验证**:当...

    Java的oauth2.0 服务端与客户端的实现(源码)

    - **Token Endpoint**:客户端通过此接口获取访问令牌。 - **Resource Owner Password Credentials Grant**:一种授权类型,允许用户直接提供用户名和密码来获取令牌。 - **Authorization Code Grant**:另一种常见...

    jenkins credentials-plugin1.11.hpi

    Credentials Plugin version:1.11 download from github,and have build it by: Run mvn clean package to create the plugin .hpi file. To install: 1. copy the resulting ./target/credentials.hpi file ...

    C# ftp客户端源代码

    - 通过FtpWebResponse的StatusDescription属性,可以获取FTP服务器返回的状态信息,帮助调试和理解FTP会话过程。 在给定的文件"**FtpClient**"中,很可能是包含了完整的FTP客户端实现源代码,包括以上提到的各个...

    Ftp客户端源码

    C#的`FtpWebRequest`类可以获取目录列表,通过`GetResponse()`方法获取`FtpWebResponse`,再通过`GetResponseStream()`读取目录信息。 6. **处理中文欢迎词**:描述中提到的“有中文欢迎词时的FTP处理”可能是指在...

    Java的oauth2.0 服务端与客户端的实现

    以及授权码(Authorization Code)、隐式(Implicit)、密码(Resource Owner Password Credentials)和客户端凭据(Client Credentials)四种授权流程。接下来,我们将详细探讨Java环境下如何实现OAuth 2.0服务端和...

    基于C#的FTP服务器、客户端设计

    2. **PASV模式**:在发送任何数据命令之前,客户端需要通过发送PASV命令获取服务器的数据连接端口号。FtpWebRequest的UsePassive属性用于启用PASV模式。 3. **文件操作**:客户端通过调用FtpWebRequest的...

    C#编写简单的邮件客户端(支持POP3,SMTP)

    2. 初始化`SmtpClient`,配置服务器信息,并使用`UseDefaultCredentials`或`Credentials`属性设置认证信息。 3. 调用`SmtpClient.Send`发送邮件。 4. 对于POP3部分,创建`Pop3Client`,设置服务器信息并登录。 5. ...

    JAVA服务端和客户端功能实现 OAuth2.0

    5. 用户信息端点(User Info Endpoint):在客户端获取访问令牌后,可以通过这个端点获取用户信息。 客户端则负责与用户交互,获取授权码或用户凭据,并向服务端请求令牌。实现过程中,客户端可能需要创建以下组件...

    c# 邮件客户端Email_Client

    本项目“c# 邮件客户端Email_Client”是利用C#语言实现的一个邮件客户端程序,它允许用户收发电子邮件,是理解C#与网络通信交互的重要示例。 在构建邮件客户端时,主要涉及以下核心知识点: 1. **SMTP(Simple ...

    一个FTP客户端的C#代码

    FTP客户端的C#代码是用于实现文件传输协议(FTP)的一种编程实现,主要在ASP.NET平台上,使用C#语言编写。FTP是一种标准网络协议,它允许用户从远程服务器上传或下载文件,对于Web开发和数据交换具有重要意义。下面...

    FTP 客户端 功能很强大

    C#中,可以通过`FtpWebRequest.Credentials`设置认证信息。 5. **上传和下载文件**:使用`FtpWebRequest.GetRequestStream()`创建数据流,然后读写文件内容到该流,实现文件的上传或下载。同时,要注意处理文件编码...

    OWIN实现OAuth 2.0 之客户端模式(Client Credential)

    换句话说,如果你的项目使用OWIN实现OAuth 2.0 之客户端模式,但是没有配置machineKey,也没有在认证服务中自定义认证。那么我就可以利用OWIN实现OAuth 2.0 之客户端模式的基本原理生成一个token,你会发现我这个...

Global site tag (gtag.js) - Google Analytics