cas5.3.2单点登录-单点登出(十一)

article/2025/8/20 21:31:06

原文地址,转载请注明出处: https://blog.csdn.net/qq_34021712/article/details/81515317     ©王赛超 

既然有单点登录,肯定就要有登出,之前的整合都是只针对了登录,对登出并没有关注,今天我们就来讲讲登出。

关于单点登出原理,参考博客:

https://blog.csdn.net/u010588262/article/details/80201983
https://blog.csdn.net/gdsgdh308227363/article/details/80446168

参数说明

参考官网地址
https://apereo.github.io/cas/5.3.x/installation/Configuration-Properties.html#logout
官网共给出了以下几个属性值:

#配置单点登出
#配置允许登出后跳转到指定页面
cas.logout.followServiceRedirects=false
#跳转到指定页面需要的参数名为 service
cas.logout.redirectParameter=service
#登出后需要跳转到的地址,如果配置该参数,service将无效。
cas.logout.redirectUrl=https://www.taobao.com
#在退出时是否需要 确认退出提示   true弹出确认提示框  false直接退出
cas.logout.confirmLogout=true
#是否移除子系统的票据
cas.logout.removeDescendantTickets=true
#禁用单点登出,默认是false不禁止
#cas.slo.disabled=true
#默认异步通知客户端,清除session
#cas.slo.asynchronous=true

cas 默认登出后默认会跳转到CASServer的登出页,若想跳转到其它资源,可在/logout的URL后面加上service=jumpurl,例如:https://server.cas.com:8443/cas/logout?service=https://www.github.com
但默认servcie跳转不会生效,需要在 cas服务端的application.properties添加cas.logout.followServiceRedirects=true
这个参数也不一定非要叫 service, 可以通过cas.logout.redirectParameter 来修改它。
另外,默认退出的时候没有任何提示,直接就退出了,若想要有弹出提示,需要添加as.logout.confirmLogout=true
再另外,有一个cas.logout.redirectUrl的属性,可以配置默认登出之后跳转到的连接,若 配置该属性,service参数将无效。就算传了service参数,也是走的该页面,所以我们不需要配置此参数。
如果配置了cas.slo.disabled=true 将禁用单点登出。调用登出将无效。

配置过程

服务端配置

application.properties添加以下属性
#配置允许登出后跳转到指定页面
cas.logout.followServiceRedirects=true
#跳转到指定页面需要的参数名为 service
cas.logout.redirectParameter=service
#在退出时是否需要 确认一下  true确认 false直接退出
cas.logout.confirmLogout=true
#是否移除子系统的票据
cas.logout.removeDescendantTickets=true

客户端配置

可以直接在客户端的登出连接写成服务端的登出地址,不过我没有这样做。
我打算客户端写一个UserController,在各自的系统点击登出,先进入本服务的后台方法,在该方法中重定向到服务端的登出地址。

UserController.java
package com.wangsaichao.cas.controller;import com.wangsaichao.cas.service.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;import javax.servlet.http.HttpSession;/*** @author: wangsaichao* @date: 2018/8/1* @description: 用户相关操作controller*/
@Controller
public class UserController {@Autowiredprivate UserService userService;@RequestMapping("insert")public String insert(String username){userService.insert(username);return "result";}/*** 跳转到默认页面* @param session* @return*/@RequestMapping("/logout1")public String loginOut(HttpSession session){session.invalidate();//这个是直接退出,走的是默认退出方式return "redirect:https://server.cas.com:8443/cas/logout";}/*** 跳转到指定页面* @param session* @return*/@RequestMapping("/logout2")public String loginOut2(HttpSession session){session.invalidate();//退出登录后,跳转到退成成功的页面,不走默认页面return "redirect:https://server.cas.com:8443/cas/logout?service=http://app1.cas.com:8081";}}

注意:每个退出方法内都有一个session.invalidate();在点击退出的时候,销毁当前服务的session,如果没有配置这一行代码,你会发现,点击退出之后,还需要刷新一下连接才能重新跳转回登录页。

index.jsp

为了方便测试,在index.jsp添加两种退出方式的连接,完整代码如下:

<%@page contentType="text/html" %>
<%@page pageEncoding="UTF-8" %>
<%@ page import="java.util.Map" %>
<%@ page import="java.util.Iterator" %>
<%@ page import="java.util.List" %>
<%@ page import="org.jasig.cas.client.authentication.AttributePrincipal" %><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd"><html>
<head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><title>CAS Example Java Web App</title>
</head>
<body><h1>当前为客户端1</h1>
<h2><a href="http://app1.cas.com:8081/">客户端1</a></h2>
<h2><a href="http://app2.cas.com:8082/">客户端2</a></h2><a href="<%=request.getContextPath() %>/logout1" title="Click here to log out">退出系统(方式1:跳转到默认页)</a>
<a href="<%=request.getContextPath() %>/logout2" title="Click here to log out">退出系统(方式2:跳转到指定页)</a>
<p>A sample web application that exercises the CAS protocol features via the Java CAS Client.</p>
<hr><p><b>Authenticated User Id:</b> <a href="logout.jsp" title="Click here to log out"><%= request.getRemoteUser() %>
</a></p><%if (request.getUserPrincipal() != null) {AttributePrincipal principal = (AttributePrincipal) request.getUserPrincipal();final Map attributes = principal.getAttributes();if (attributes != null) {Iterator attributeNames = attributes.keySet().iterator();out.println("<b>Attributes:</b>");if (attributeNames.hasNext()) {out.println("<hr><table border='3pt' width='100%'>");out.println("<th colspan='2'>Attributes</th>");out.println("<tr><td><b>Key</b></td><td><b>Value</b></td></tr>");for (; attributeNames.hasNext(); ) {out.println("<tr><td>");String attributeName = (String) attributeNames.next();out.println(attributeName);out.println("</td><td>");final Object attributeValue = attributes.get(attributeName);if (attributeValue instanceof List) {final List values = (List) attributeValue;out.println("<strong>Multi-valued attribute: " + values.size() + "</strong>");out.println("<ul>");for (Object value : values) {out.println("<li>" + value + "</li>");}out.println("</ul>");} else {out.println(attributeValue);}out.println("</td></tr>");}out.println("</table>");} else {out.print("No attributes are supplied by the CAS server.</p>");}} else {out.println("<pre>The attribute map is empty. Review your CAS filter configurations.</pre>");}} else {out.println("<pre>The user principal is empty from the request object. Review the wrapper filter configuration.</pre>");}
%></body>
</html>

测试

1.先访问任意一个客户端登录
2.然后复制地址,打开另一个页面,让两个页面是不同的客户端
3.在任意一个客户端点击退出,刷新另一个服务的网页。
这里写图片描述


http://chatgpt.dhexx.cn/article/pe4etRGx.shtml

相关文章

数说故事车企数字化渠道管理创新方法——精准进行消费者洞察

随着疫情带来的变化&#xff0c;原来在一二线城市的购物中心店&#xff0c;受人流量的不确定性冲击越来越大&#xff0c;但成本的支出也越来越高。因此购物中心店&#xff0c;将有可能从原来的重“集客”功能&#xff0c;变成更多的从品牌、体验出发的形象中心店&#xff0c;“…

权威报告!这五个消费趋势,告诉你如何抓住中国消费者的心和钱包

有人说2023年是消费复苏的一年&#xff0c;市场回暖趋势明显&#xff1b;也有人说之前的亏空太大&#xff0c;想要短时间追上来不太可能&#xff0c;因此2023的消费市场最多是不低迷&#xff0c;达不到火热。 这可把做生意的各位老板整纠结了&#xff0c;究竟今年要不要投个大手…

ChatGPT与数据挖掘:洞察消费者行为,优化营销策略

随着科技的不断进步和数字化时代的到来&#xff0c;企业们越来越意识到数据的重要性。在零售和电子商务行业&#xff0c;了解消费者行为并准确洞察其需求&#xff0c;是成功营销和提升业绩的关键。而现在&#xff0c;借助人工智能技术中的ChatGPT以及数据挖掘技术&#xff0c;企…

市场营销学5——消费者购买行为分析

什么是消费者购买行为 消费者购买行为是指人们为满足需要和欲望而寻找、选择、购买、使用、评价及处置产品、服务时介入的过程活动&#xff0c;包括消费者的主观心理活动和客观物质活动两个方面。 消费者购买行为分析的环节 消费者购买行为研究包括以下几个环节&#xff1a; 购…

【消费战略方法论】认识消费者的恒常原理(三):消费者刺激反馈原理

人类是一种高度智能的生物&#xff0c;而所谓智能的核心在于其理解世界的能力&#xff0c;而理解世界的过程中必然伴随着感知和反应。人的刺激反馈机制就是在这个过程中发挥着重要的作用。 刺激反馈机制是一种生物学的反应现象&#xff0c;它指的是人体对外界刺激的感知与反应…

大数据之kafka消费者

&#x1f352;今天是端午节&#xff0c;先祝大家端午节快乐&#xff01;上一期我们学习了kafka的broker部分主要介绍了kafka中的副本、kafka文件的存储的原理&#xff0c;以及kafka的高效读写的保证&#xff0c;今天我们来介绍kafka中的消费者原理&#xff0c;对往期内容感兴趣…

元年智答|数据洞察功能介绍

什么是数据洞察 随着企业积累数据量增多&#xff0c;数据分析师常常需要处理“长且宽”的数据集。依靠人的经验处理海量数据&#xff0c;从海量数据中发掘出有用的信息无异于大海捞针。虽然人工智能技术的普及和单位算力价格的下降大大降低了数据挖掘的门槛&#xff0c;但是面…

营销创意没灵感?社交媒体和消费者洞察给你答案

创意是营销的核心。 品牌需要优秀的创意营销才能吸引消费者、与受众建立联系、宣传产品与服务。 想要营销内容创作方面表现出色&#xff0c;品牌就需要源源不断的新鲜创意来抓住人们的眼球、占领消费者注意力。 在实际营销过程中&#xff0c;出海品牌常常为创意冥思苦想、绞尽…

经典消费者生产者问题

首先你需要了解多线程的流程以及实现多线程的几种方法&#xff0c;同时你要理解什么是并行、并发&#xff0c;以及线程和进程的区别&#xff0c;这里做简要的区别。 线程&#xff1a;一个进程包括多个线程 并行&#xff1a;多个cpu实例或者多台机器同时执行一段处理逻辑&#x…

【报告分享】德勤:2023中国消费者洞察与市场展望.pdf(附下载链接)

省时查报告-专业、及时、全面的行研报告库 省时查方案-专业、及时、全面的营销策划方案库 【免费下载】2022年12月份热门报告盘点 罗振宇2023年跨年演讲PPT原稿吴晓波2022年年终秀演讲PPT原稿2023年&#xff0c;如何科学制定年度规划&#xff1f; 《底层逻辑》高清配图 华为202…

2023中国消费者洞察报告

下载报告去公众号&#xff1a;硬核刘大 后台回复“ 消费者洞察”&#xff0c;即可下载完整PDF文件。 更多报告内容&#xff0c;可加微信&#xff1a;chanpin628 领取。(ps&#xff1a;加过微信&#xff1a;chanpin628 的不要再加&#xff0c;分享的内容一样&#xff0c;有一个…

大数据营销更需要消费者洞察

2013年10月17日&#xff0c;独立商业趋势观察家&#xff0c;知名中国消费趋势研究专家&#xff0c;数字营销专家肖明超先生&#xff0c;应凤凰网的邀请参加了凤凰网在广州举办的“营销人的幸福梦”主题沙龙活动&#xff0c;并与凤凰网副总裁徐进、琥珀传播CEO刘阳&#xff0c;一…

消费者消费消息分析

消费者读流程 】每个consumer都可以根据分配策略&#xff08;默认RangeAssignor&#xff09;&#xff0c;获得要消费的分区 】 获取到consumer对应的offset&#xff08;默认从ZK中获取上一次消费的offset&#xff09; 】 找到该分区的leader&#xff0c;拉取数据 】 消费者提交…

消费者详解-消费消息(1)

文章目录 消费者消费消息流程Pull消费流程1. 初始化消费者2. 拉取topic的消息队列3. 拉取消费位点4. 根据消费位点消费消息5. 保存消费进度拉取消息-pullKernelImpl Broker处理拉取消息请求1、权限、参数校验并且获取初始化变量&#xff1a;2、获取拉取消息的topic配置3、解析订…

直播报名 | 海外社交媒体趋势如何?出海品牌如何掌握消费者洞察?

近年来&#xff0c;中国品牌出海势头强劲&#xff0c;智能硬件、互联网应用、时尚服饰等正加速风靡海外市场&#xff0c;涌现出像安克创新、SHEIN这样的全球化品牌。有人提问&#xff0c;安克创新&#xff0c;凭借什么成为全球化品牌&#xff1f;出海企业可以从中借鉴什么&…

Kafka消费者不消费数据

背景&#xff1a; 工作往往是千篇一律&#xff0c;真正能学到点知识都是在上线后。使用SkywalkingKafkaES进行应用监控。 现象&#xff1a; 公司使用Skywalking在开发测试环境中Kafka顺利消费数据&#xff0c;到了UAT环境一开始还正常&#xff0c;后面接入了更多的应用后出现…

食品品牌如何做好消费需求洞察直抵消费者心智

做生意的都明白这样一个道理&#xff1a;“先找到买主&#xff0c;再依照需求出售”。之所以这一点很重要&#xff0c;因为这揭示了一条经营企业过程中必须遵守的金科玉律&#xff1a;先有需求&#xff0c;而后才有你的品牌、服务或功能。 需求洞察是品牌、产品、服务等一切的…

消费者洞察:数据影响消费,消费营造数据

本文根据Stratifyd资深解决方案经理段鑫龙(Bruce Duan)在9月24日的直播演讲内容整理,演讲围绕“如何洞察消费者”从四个层面展开:首先是(疫情期间以及后疫情时代)消费品行业的发展现状和未来趋势;然后是当前现状下如何通过数据化闭环洞察消费者;有了前面的理论支撑和方…

助力品牌洞察——消费者情绪行为分析

什么是情绪分析&#xff1f; 随着社交网络和数字营销的出现&#xff0c;消费者对产品和品牌的评价受到越来越多的关注。在线用户反馈&#xff08;例如产品评价、社交媒体评论和调查问卷等&#xff09;包含了大量具有价值的数据。通过这些数据&#xff0c;可以了解消费者对您产…

数据分析:消费者数据分析

数据分析&#xff1a;消费者数据分析 作者&#xff1a;i阿极 作者简介&#xff1a;Python领域新星作者、多项比赛获奖者&#xff1a;博主个人首页 &#x1f60a;&#x1f60a;&#x1f60a;如果觉得文章不错或能帮助到你学习&#xff0c;可以点赞&#x1f44d;收藏&#x1f4c1…