cas单点登录-springboot集成

news/2024/11/28 15:46:30/

一.yml配置

#cas单点登录
cas:prefixUrl: https://域名:8443/cas

二.业务层解析ticket

1.根据前端传来的ticket向cas服务端发起请求验证(由于url是https,发起请求要过滤ssl验证)

public static String getStValidate(String url, String st, String service){try {url = url+"?service="+service+"&ticket="+st;CloseableHttpClient httpClient = null;SSLConnectionSocketFactory scsf = new SSLConnectionSocketFactory(SSLContexts.custom().loadTrustMaterial(null, new TrustSelfSignedStrategy()).build(),NoopHostnameVerifier.INSTANCE);httpClient = HttpClients.custom().setSSLSocketFactory(scsf).build();HttpGet httpget = new HttpGet(url);HttpResponse response = httpClient.execute(httpget);String res = readResponse(response);return res == null ? null : (res == "" ? null : res);} catch (Exception e) {e.printStackTrace();}return "";}

2.得到cas服务端返回数据并yongxml工具类解析用户信息(下面方法不完整)

final String principal = XmlUtils.getTextForElement(res, "user");
public static String getTextForElement(final String xmlAsString, final String element) {final XMLReader reader = getXmlReader();final StringBuilder builder = new StringBuilder();final DefaultHandler handler = new DefaultHandler() {private boolean foundElement = false;@Overridepublic void startElement(final String uri, final String localName, final String qName,final Attributes attributes) throws SAXException {if (localName.equals(element)) {this.foundElement = true;}}@Overridepublic void endElement(final String uri, final String localName, final String qName) throws SAXException {if (localName.equals(element)) {this.foundElement = false;}}@Overridepublic void characters(char[] ch, int start, int length) throws SAXException {if (this.foundElement) {builder.append(ch, start, length);}}};reader.setContentHandler(handler);reader.setErrorHandler(handler);try {reader.parse(new InputSource(new StringReader(xmlAsString)));} catch (final Exception e) {log.error(e.getMessage(), e);return null;}return builder.toString();}

3.根据得到的用户去系统数据库查询是否存在该用户

if (StringUtils.isEmpty(principal)) {throw new Exception("No principal was found in the response from the CAS server.");}log.info("-------token----username---"+principal);//1. 校验用户是否有效SysUser sysUser = sysUserService.getUserByName(principal);result = sysUserService.checkUserIsEffective(sysUser);if(!result.isSuccess()) {return result;}String token = JwtUtil.sign(sysUser.getUsername(), sysUser.getPassword());// 设置超时时间redisUtil.set(CommonConstant.PREFIX_USER_TOKEN + token, token);redisUtil.expire(CommonConstant.PREFIX_USER_TOKEN + token, JwtUtil.EXPIRE_TIME*2 / 1000);obj.put("token", token);obj.put("userInfo", sysUser);result.success("登录成功");


http://www.ppmy.cn/news/239746.html

相关文章

Git简介

一、git介绍 Git(读音为/gɪt/)是一个开源的分布式版本控制系统,可以有效、高速地处理从很小到非常大的项目版本管理。也是Linus Torvalds为了帮助管理Linux内核开发而开发的一个开放源码的版本控制软件。 简而言之,Git是一款分布…

mt6765和骁龙665哪个好_联发科mt6765怎么样?和联发科P30/P35/P40处理器区别对比哪个好...

联发科mt6765性能怎么样?和联发科P30、P35、P40区别有哪些?联发科一直致于移动处理器的研发,这个大家都是知道的,因此联发科有着众多的CPU型号,比如P系列、G系列等等。那么大家经常在网上看到的联发科mt6765是个什么处理器呢?和P30/P35/P40之间有什么关系呢?下面智能手机…

4K投影仪哪款性价比最高,当贝X3 Pro高亮128G存储618值得看

2022年的618预售已经开始了,今年618大家都看了哪些家用投影仪品牌呢,哥是重点关注4K投影仪,作为1名资深数码玩家,4K分辨率投影仪一直都考虑,2022年618购物节哥看了这款万元以内4K超高清分辨率投影仪,看看哥…

OPPO K9x和荣耀X30哪个好

OPPO K9x正面采用左上打孔屏设计,背面则运用了流光晶钻拼接工艺,两种配色分别为银紫超梦及黑曜武士,整机重194g,厚度8.8mm。选OPPO K9x还是荣耀X30这些点很重要 http://shouji.adiannao.cn/7 屏幕上采用6.49英寸、24001080分辨率…

智能电视主流的CPU有三家。一个是Mstar(晨星),另两个是MTK和Amlogic(晶晨)

智能电视主流的CPU有三家。一个是Mstar,另两个是MTK和Amlogic。Mstar 是电视芯片中规模最大,销量最高,技术实力最为雄厚的芯片厂家,类似手机芯片中高通的地位,其中Mstar 6A938 属于旗舰系列,内置了动态补偿…

[javascript核心-05] 全面梳理 ES6+,从 ES6~ES12(一定有你不知道的一款)

本文github地址:JavaScript_Interview_Everything 大前端知识体系与面试宝典,从前端到后端,全栈工程师,成为六边形战士 字面量增强 1.属性简写 let name flten let age 16let obj {name, // name:nameage, // age:age }2.方法简写 let…

计算机网络开荒2-应用层

文章目录 一、网络应用体系结构2.1 客户机/服务器结构(Client-Server,C/S)2.2 点对点结构(Peer-to-peer,P2P)2.3 混合结构(Hybrid) 二、网路应用的进程通信2.1 套接字Socket2.2 应用层协议的内容 三、网络应用的需求与传输层服务四、Web4.1 HTTP4.1.1 HTTP连接类型4.1.1.1 非持…

辉芒微MCU全系列供应,FT60,61,62

各位吧友们,有需要辉芒微的MCU,样品免费,还有开发资料,开发工具,技术服务支持,常出型号有60F011A,60F211,60F112,61F021A,等等等,欢迎咨询:VX:15814677718