【CAS】自定义登录页面,返回更多信息

2024-08-25 18:48

本文主要是介绍【CAS】自定义登录页面,返回更多信息,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

【回顾】
	在上一篇关于cas的博客中,我们自定义了数据库的连接配置,从而验证用户所提供的凭据是否正确。本篇
博客,将介绍的内容是自定义登录页面以及用户登录成功后,将更多的用户信息返回给客户端。
【自定义登录页面】
	在cas server 4.0的源码中,可以找到cas.properties文件中定义了视图页面的相关配置,如下:
		
	在cas-theme-default.properties中,引入了cas默认的一个js和一个css文件。
	在default_views.properties中,定义的是各个url与对应的页面视图配置,例如登录和退出页面的配置如
下:
    
	所以,我们要想用自定义的登录页面,只需要将此properties修改为自己的页面名称即可。
	下图目录结构中标明的页面为我们自定义的登录和退出页面,引用的是BootStrap的一个表单模板样式,引
入一些BootStrap的js和css文件,就可以了。
				
	再修改default_views.properties文件,如下:
        
	自定义登录页面就完成了。
			
【返回更多用户信息】
	在cas server登录成功后,默认只能从cas server得到用户名,也许客户端会需要该用户的更多信息,这时
客户端可以通过用户名再去查询数据库,但如果用户登录成功后,直接从cas server返回给客户端,这样就更方便
了。尤其是在分布式系统中,cas server将用户信息传递给各个应用系统,就避免了各个用户系统去查询的重复性工
作。那么将更多的信息返回给客户端,我们需要做哪些配置呢?
	1. 配置属性attributeRepository

<bean id="attributeRepository" class="org.jasig.services.persondir.support.jdbc.SingleRowJdbcPersonAttributeDao"><!--  <property name="contextSource" ref="contextSource" /><property name="baseDN" value="ou=people,o=company,c=fr" /><property name="requireAllQueryAttributes" value="true" /> --><constructor-arg index="0" ref="dataSource"/><constructor-arg index="1" value="select r.databaseName FROM itoo_cloudroot.ta_allusers a INNER JOIN itoo_cloudroot.ta_registuser r 
ON a.registUserId=r.id where a.isDelete = 0 and {0} "/><!--Attribute mapping between principal (key) and LDAP (value) namesused to perform the LDAP search.  By default, multiple search criteriaare ANDed together.  Set the queryType property to change to OR.--><property name="queryAttributeMapping"><map> <!--这里的key需写username和登录页面一致,value对应数据库用户名字段--><entry key="username" value="a.userCode" /></map></property><property name="resultAttributeMapping"><map><!-- Mapping beetween LDAP entry attributes (key) and Principal's (value) --> <!--key为对应的数据库字段名称,value为提供给客户端获取的属性名字,系统会自动填充值-->  <entry value="databaseName" key="databaseName" /></map></property></bean>

	2. 修改serviceRegistryDao

	deployerConfigContext.xml中的 beans中id为serviceRegistryDao的属性 registeredServicesList。在
 registeredServicesList中添加allowedAttributes属性的值。列出的每个值,在客户端就可以访问了。

	<beanid="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 and IMAP" /><property name="description" value="Allows HTTP(S) and IMAP(S) protocols" /><property name="serviceId" value="^(https?|imaps?)://.*" /><property name="evaluationOrder" value="10000001" /><property name="allowedAttributes">  <list>                                        <value>databaseName</value></list></property></bean></list></property></bean>

	3. 修改casServiceValidationSuccess.jsp

	WEB-INF/view/jsp/protocol/2.0/casServiceValidationSuccess.jsp.在server验证成功后,这个页面负责
生成与客户端交互的xml信息,在默认的casServiceValidationSuccess.jsp中,只包括用户名,并不提供其他的属性信
息,因此需要对页面进行扩展。如下:

<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>

【总结】

	关于cas server的一些配置网上的资料很多,这两篇文章的配置也算是搭建cas server必须要做的配置,需
要修改的地方主要在配置文件中。

这篇关于【CAS】自定义登录页面,返回更多信息的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1106364

相关文章

统一返回JsonResult踩坑的记录

《统一返回JsonResult踩坑的记录》:本文主要介绍统一返回JsonResult踩坑的记录,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录统一返回jsonResult踩坑定义了一个统一返回类在使用时,JsonResult没有get/set方法时响应总结统一返回

如何自定义一个log适配器starter

《如何自定义一个log适配器starter》:本文主要介绍如何自定义一个log适配器starter的问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录需求Starter 项目目录结构pom.XML 配置LogInitializer实现MDCInterceptor

MyBatis设计SQL返回布尔值(Boolean)的常见方法

《MyBatis设计SQL返回布尔值(Boolean)的常见方法》这篇文章主要为大家详细介绍了MyBatis设计SQL返回布尔值(Boolean)的几种常见方法,文中的示例代码讲解详细,感兴趣的小伙伴... 目录方案一:使用COUNT查询存在性(推荐)方案二:条件表达式直接返回布尔方案三:存在性检查(EXI

Java中的登录技术保姆级详细教程

《Java中的登录技术保姆级详细教程》:本文主要介绍Java中登录技术保姆级详细教程的相关资料,在Java中我们可以使用各种技术和框架来实现这些功能,文中通过代码介绍的非常详细,需要的朋友可以参考... 目录1.登录思路2.登录标记1.会话技术2.会话跟踪1.Cookie技术2.Session技术3.令牌技

Druid连接池实现自定义数据库密码加解密功能

《Druid连接池实现自定义数据库密码加解密功能》在现代应用开发中,数据安全是至关重要的,本文将介绍如何在​​Druid​​连接池中实现自定义的数据库密码加解密功能,有需要的小伙伴可以参考一下... 目录1. 环境准备2. 密码加密算法的选择3. 自定义 ​​DruidDataSource​​ 的密码解密3

Python函数返回多个值的多种方法小结

《Python函数返回多个值的多种方法小结》在Python中,函数通常用于封装一段代码,使其可以重复调用,有时,我们希望一个函数能够返回多个值,Python提供了几种不同的方法来实现这一点,需要的朋友... 目录一、使用元组(Tuple):二、使用列表(list)三、使用字典(Dictionary)四、 使

Linux查看系统盘和SSD盘的容量、型号及挂载信息的方法

《Linux查看系统盘和SSD盘的容量、型号及挂载信息的方法》在Linux系统中,管理磁盘设备和分区是日常运维工作的重要部分,而lsblk命令是一个强大的工具,它用于列出系统中的块设备(blockde... 目录1. 查看所有磁盘的物理信息方法 1:使用 lsblk(推荐)方法 2:使用 fdisk -l(

spring-gateway filters添加自定义过滤器实现流程分析(可插拔)

《spring-gatewayfilters添加自定义过滤器实现流程分析(可插拔)》:本文主要介绍spring-gatewayfilters添加自定义过滤器实现流程分析(可插拔),本文通过实例图... 目录需求背景需求拆解设计流程及作用域逻辑处理代码逻辑需求背景公司要求,通过公司网络代理访问的请求需要做请

SpringBoot如何对密码等敏感信息进行脱敏处理

《SpringBoot如何对密码等敏感信息进行脱敏处理》这篇文章主要为大家详细介绍了SpringBoot对密码等敏感信息进行脱敏处理的几个常用方法,文中的示例代码讲解详细,感兴趣的小伙伴可以了解下... 目录​1. 配置文件敏感信息脱敏​​2. 日志脱敏​​3. API响应脱敏​​4. 其他注意事项​​总结

SpringBoot后端实现小程序微信登录功能实现

《SpringBoot后端实现小程序微信登录功能实现》微信小程序登录是开发者通过微信提供的身份验证机制,获取用户唯一标识(openid)和会话密钥(session_key)的过程,这篇文章给大家介绍S... 目录SpringBoot实现微信小程序登录简介SpringBoot后端实现微信登录SpringBoo