【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

相关文章

通过React实现页面的无限滚动效果

《通过React实现页面的无限滚动效果》今天我们来聊聊无限滚动这个现代Web开发中不可或缺的技术,无论你是刷微博、逛知乎还是看脚本,无限滚动都已经渗透到我们日常的浏览体验中,那么,如何优雅地实现它呢?... 目录1. 早期的解决方案2. 交叉观察者:IntersectionObserver2.1 Inter

C#自动化实现检测并删除PDF文件中的空白页面

《C#自动化实现检测并删除PDF文件中的空白页面》PDF文档在日常工作和生活中扮演着重要的角色,本文将深入探讨如何使用C#编程语言,结合强大的PDF处理库,自动化地检测并删除PDF文件中的空白页面,感... 目录理解PDF空白页的定义与挑战引入Spire.PDF for .NET库核心实现:检测并删除空白页

C#中通过Response.Headers设置自定义参数的代码示例

《C#中通过Response.Headers设置自定义参数的代码示例》:本文主要介绍C#中通过Response.Headers设置自定义响应头的方法,涵盖基础添加、安全校验、生产实践及调试技巧,强... 目录一、基础设置方法1. 直接添加自定义头2. 批量设置模式二、高级配置技巧1. 安全校验机制2. 类型

90%的人第一步就错了! 顺利登录wifi路由器后台的技巧

《90%的人第一步就错了!顺利登录wifi路由器后台的技巧》登录Wi-Fi路由器,其实就是进入它的后台管理页面,很多朋友不知道该怎么进入路由器后台设置,感兴趣的朋友可以花3分钟了解一下... 你是不是也遇到过这种情况:家里网速突然变慢、想改WiFi密码却不知道从哪进路由器、新装宽带后完全不知道怎么设置?别慌

linux查找java项目日志查找报错信息方式

《linux查找java项目日志查找报错信息方式》日志查找定位步骤:进入项目,用tail-f实时跟踪日志,tail-n1000查看末尾1000行,grep搜索关键词或时间,vim内精准查找并高亮定位,... 目录日志查找定位在当前文件里找到报错消息总结日志查找定位1.cd 进入项目2.正常日志 和错误日

SpringBoot AspectJ切面配合自定义注解实现权限校验的示例详解

《SpringBootAspectJ切面配合自定义注解实现权限校验的示例详解》本文章介绍了如何通过创建自定义的权限校验注解,配合AspectJ切面拦截注解实现权限校验,本文结合实例代码给大家介绍的非... 目录1. 创建权限校验注解2. 创建ASPectJ切面拦截注解校验权限3. 用法示例A. 参考文章本文

Vite 打包目录结构自定义配置小结

《Vite打包目录结构自定义配置小结》在Vite工程开发中,默认打包后的dist目录资源常集中在asset目录下,不利于资源管理,本文基于Rollup配置原理,本文就来介绍一下通过Vite配置自定义... 目录一、实现原理二、具体配置步骤1. 基础配置文件2. 配置说明(1)js 资源分离(2)非 JS 资

JWT + 拦截器实现无状态登录系统

《JWT+拦截器实现无状态登录系统》JWT(JSONWebToken)提供了一种无状态的解决方案:用户登录后,服务器返回一个Token,后续请求携带该Token即可完成身份验证,无需服务器存储会话... 目录✅ 引言 一、JWT 是什么? 二、技术选型 三、项目结构 四、核心代码实现4.1 添加依赖(pom

聊聊springboot中如何自定义消息转换器

《聊聊springboot中如何自定义消息转换器》SpringBoot通过HttpMessageConverter处理HTTP数据转换,支持多种媒体类型,接下来通过本文给大家介绍springboot中... 目录核心接口springboot默认提供的转换器如何自定义消息转换器Spring Boot 中的消息

Spring Security重写AuthenticationManager实现账号密码登录或者手机号码登录

《SpringSecurity重写AuthenticationManager实现账号密码登录或者手机号码登录》本文主要介绍了SpringSecurity重写AuthenticationManage... 目录一、创建自定义认证提供者CustomAuthenticationProvider二、创建认证业务Us