CAS Apereo 5.3.16 实现单点登录

1.CAS部署

服务端下载地址:cas5.3

1.下载好打开后,复制target/cas/WEB-INF/classes/META-INF/spring.factories
target/cas/WEB-INF/classes/services下的Apereo-10000002.json和HTTPSandIMAPS-10000001.json
target/cas/WEB-INF/classes下的application.properties和log4j2.xml到resources中形成如下结构:
在这里插入图片描述
2.然后修改HTTPSandIMAPS-10000001.json文件,添加http
在这里插入图片描述
3.修改application.properties文件,注释掉server.ssl三行配置,修改端口号(与tomcat中的保持一致就行)。
在这里插入图片描述
4.再增加两行配置:
在这里插入图片描述5.将项目打包生成.war文件,并命名为cas,放在tomcat的webapps目录下,启动tomcat,浏览器输入http://ip:端口号/cas/login,成功后如下图所示:
在这里插入图片描述
输入中的默认用户名casuser,密码Mellon,在application.properties文件的cas.authn.accept.users=casuser::Mellon配置中。
在这里插入图片描述
登出的url:http://ip:端口号/cas/logout
在这里插入图片描述

2.自定义校验——对接数据库

1.在源码的pom.xml中添加jdbc依赖包

			<dependency><groupId>org.apereo.cas</groupId><artifactId>cas-server-support-jdbc</artifactId><version>${cas.version}</version></dependency><dependency><groupId>org.apereo.cas</groupId><artifactId>cas-server-support-jdbc-drivers</artifactId><version>${cas.version}</version></dependency><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>8.0.27</version></dependency><dependency><groupId>org.apereo.cas</groupId><artifactId>cas-server-core-authentication-api</artifactId><version>${cas.version}</version></dependency><dependency><groupId>org.apereo.cas</groupId><artifactId>cas-server-support-generic</artifactId><version>${cas.version}</version></dependency>

也可自行下载相关包,放入tomcat\webapps\cas\WEB-INF\lib路径下
在这里插入图片描述
2.修改application.properties文件,添加如下配置:

cas.authn.jdbc.query[0].url=jdbc:mysql://ip:端口号/数据库名?serverTimezone=GMT
cas.authn.jdbc.query[0].user=连接数据库的用户名
cas.authn.jdbc.query[0].password=连接数据库的密码
cas.authn.jdbc.query[0].sql=select * from 用户表名 where 用户名字段名称=?
cas.authn.jdbc.query[0].fieldPassword=密码字段名称
cas.authn.jdbc.query[0].driverClass=com.mysql.jdbc.Driver

如果数据库中密码是密文,还可添加如下配置:

cas.authn.jdbc.query[0].passwordEncoder.type=DEFAULT
cas.authn.jdbc.query[0].passwordEncoder.characterEncoding=UTF-8
cas.authn.jdbc.query[0].passwordEncoder.encodingAlgorithm=MD5     //密码加密算法,内置的有MD5、SHA、HMAC

整体如下图:
在这里插入图片描述
3.重启tomcat,输入数据库中的用户名、密码,登陆成功。

3.自定义校验——自定义密码校验

1.自定义加密算法可通过实现PasswordEncoder接口的matches方法实现。

package com.example.cas;import org.springframework.security.crypto.password.PasswordEncoder;public class SHA256Encodeing implements PasswordEncoder{@Overridepublic boolean matches(CharSequence charSequence, String str) {//charSequence 为用户输入的密码String encryptVal = String.valueOf(charSequence);System.out.println("数据库密码" + str);//自定义加密算法// encryptVal为密文if (encryptVal.equals(str)){return true;}return false;}
}

若在此处需要获取用户名,则在pom.xml添加如下依赖和代码:

	<dependency><groupId>javax.servlet</groupId><artifactId>servlet-api</artifactId><version>2.5</version><scope>provided</scope></dependency>
import org.springframework.web.context.request.ServletRequestAttributes;
import org.springframework.web.context.request.RequestContextHolder;
import javax.servlet.http.HttpServletRequest;ServletRequestAttributes requestAttributes = (ServletRequestAttributes) RequestContextHolder.currentRequestAttributes();HttpServletRequest request = requestAttributes.getRequest();String username = String.valueOf(request.getParameter("username"));

2.然后修改application.properties文件:
在这里插入图片描述
3.重启tomcat,输入数据库中的用户名、密码,登陆成功。

4.自定义校验——自定义用户名校验

1.需要添加如下两个java文件。
MyAuthenticationConfiguration.java:

package com.example.cas;import com.example.cas.MyAuthenticationHandler;
import org.apereo.cas.authentication.AuthenticationEventExecutionPlan;
import org.apereo.cas.authentication.AuthenticationEventExecutionPlanConfigurer;
import org.apereo.cas.authentication.AuthenticationHandler;
import org.apereo.cas.authentication.principal.DefaultPrincipalFactory;
import org.apereo.cas.configuration.CasConfigurationProperties;
import org.apereo.cas.services.ServicesManager;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.boot.context.properties.EnableConfigurationProperties;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;/*** @description: 注册验证器*/
@Configuration("myAuthenticationConfiguration")
@EnableConfigurationProperties(CasConfigurationProperties.class)
public class MyAuthenticationConfiguration implements AuthenticationEventExecutionPlanConfigurer {@Autowiredprivate CasConfigurationProperties casProperties;@Autowired@Qualifier("servicesManager")private ServicesManager servicesManager;/*** 将自定义验证器注册为Bean* @return*/@Beanpublic AuthenticationHandler myAuthenticationHandler() {MyAuthenticationHandler handler = new MyAuthenticationHandler(MyAuthenticationHandler.class.getSimpleName(), servicesManager, new DefaultPrincipalFactory(), 1);return handler;}/*** 注册验证器* @param plan*/@Overridepublic void configureAuthenticationExecutionPlan(AuthenticationEventExecutionPlan plan) {plan.registerAuthenticationHandler(myAuthenticationHandler());}
}

MyAuthenticationHandler.java:在该java中添加具体用户名校验逻辑

package com.example.cas;import org.apereo.cas.authentication.AuthenticationHandlerExecutionResult;
import org.apereo.cas.authentication.Credential;
import org.apereo.cas.authentication.PreventedException;
import org.apereo.cas.authentication.UsernamePasswordCredential;
import org.apereo.cas.authentication.handler.support.AbstractUsernamePasswordAuthenticationHandler;
import org.apereo.cas.authentication.principal.PrincipalFactory;
import org.apereo.cas.services.ServicesManager;import javax.security.auth.login.AccountNotFoundException;
import java.security.GeneralSecurityException;
import java.util.ArrayList;
import java.util.Collections;
import org.apereo.cas.web.flow.resolver.impl.InitialAuthenticationAttemptWebflowEventResolver;public class MyAuthenticationHandler extends AbstractUsernamePasswordAuthenticationHandler{public MyAuthenticationHandler(String name, ServicesManager servicesManager, PrincipalFactory principalFactory, Integer order) {super(name, servicesManager, principalFactory, order);}@Overrideprotected AuthenticationHandlerExecutionResult authenticateUsernamePasswordInternal(UsernamePasswordCredential credential, String originalPassword) throws GeneralSecurityException, PreventedException {if("root".equals(credential.getUsername())){System.out.println("------------------:" + credential.getUsername() + "------------------");return createHandlerResult(credential,this.principalFactory.createPrincipal(credential.getUsername()),new ArrayList<>(0));}else{throw new AccountNotFoundException("必须是root用户");}}
}

2.然后修改spring.factories文件,添加配置文件
在这里插入图片描述

5.与客户端对接

1.在客户端的pom.xml添加如下依赖:
在这里插入图片描述
2.在web.xml文件中添加如下监听过滤器:

<listener><listener-class>org.jasig.cas.client.session.SingleSignOutHttpSessionListener</listener-class></listener><filter><filter-name>CAS Single Sign Out Filter</filter-name><filter-class>org.jasig.cas.client.session.SingleSignOutFilter</filter-class><init-param><param-name>casServerUrlPrefix</param-name><param-value>http://193.168.4.2:7200/cas</param-value></init-param></filter><filter-mapping><filter-name>CAS Single Sign Out Filter</filter-name><url-pattern>/*</url-pattern></filter-mapping><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://193.168.4.2:7200/cas/login</param-value></init-param><init-param><param-name>serverName</param-name><param-value>http://127.0.0.1:1000/</param-value></init-param></filter><filter><filter-name>CAS Validation Filter</filter-name><filter-class>org.jasig.cas.client.validation.Cas30ProxyReceivingTicketValidationFilter</filter-class><init-param><param-name>casServerUrlPrefix</param-name><param-value>http://193.168.4.2:7200/cas</param-value></init-param><init-param><param-name>serverName</param-name><param-value>http://127.0.0.1:1000/</param-value></init-param><init-param><param-name>redirectAfterValidation</param-name><param-value>true</param-value></init-param><init-param><param-name>useSession</param-name><param-value>true</param-value></init-param><init-param><param-name>authn_method</param-name><param-value>mfa-duo</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-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>

3.然后去掉客户端原有的登录验证逻辑。
4.实现登出需要修改application.properties文件,添加如下配置:
在这里插入图片描述
作用:可以在登出url后添加参数service,使之指向登出后跳转的url。
例如:http://ip:端口/cas/logout?service=跳转的url

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/32442.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

挑战Midjourney,融合近百个SD大模型的通用模型AlbedoBase XL

在SDXL的通用模型中&#xff0c;DreamShaperXL和juggernautXL这2款大模型一直都深受广大AI绘画者的喜爱&#xff0c;不可否认&#xff0c;这2款通用模型在很多方面表现都相当出色。 今天再给大家介绍一款基于SDXL的通用大模型&#xff1a;AlbedoBase XL&#xff0c;作者的目标…

iTextSharp 绘制pdf

一、新建项目&#xff1a;pdfdemo <ItemGroup><PackageReference Include"iTextSharp.LGPLv2.Core" Version"3.4.20" /> </ItemGroup>二、HomeController.cs using iTextSharp.text; using iTextSharp.text.pdf; using Microsoft.AspN…

UWA发布 | Unity手游性能年度蓝皮书

UWA本次发布的《2023-2024年度Unity手游性能蓝皮书》将汇总游戏行业使用Unity引擎进行手游开发过程中及游戏上线后的性能表现&#xff0c;从测试机型分布、引擎各模块开销、内存占用等方面剖析定位Unity手游性能瓶颈和趋势&#xff0c;反映了Unity手游行业的现状&#xff0c;帮…

【会议征稿,JPCS出版】第三届电力系统与能源技术国际学术会议(ICPSET 2024,7月5-7)

第三届电力系统与能源技术国际学术会议&#xff08;ICPSET 2024&#xff09;将于2024年7月5-7日在杭州举办。由浙江水利水电学院电机产业学院主办&#xff0c;AEIC学术交流中心承办&#xff0c;湖州市南浔创新研究院、南浔区科技局&#xff08;科协&#xff09;协办 。会议主要…

回溯算法练习题(2024/6/18)

1全排列 II 给定一个可包含重复数字的序列 nums &#xff0c;按任意顺序 返回所有不重复的全排列。 示例 1&#xff1a; 输入&#xff1a;nums [1,1,2] 输出&#xff1a; [[1,1,2],[1,2,1],[2,1,1]]示例 2&#xff1a; 输入&#xff1a;nums [1,2,3] 输出&#xff1a;[[1,…

rollup学习笔记

一直使用的webpack,最近突然想了解下rollup,就花点时间学习下. 一,什么是rollup? rollup 是一个 JavaScript 模块打包器&#xff0c;可以将小块代码编译成大块复杂的代码,比如我们的es6模块化代码,它就可以进行tree shaking,将无用代码进行清除,打包出精简可运行的代码包. 业…

【Java基础】

Java基础常见面试题总结(上) 基础概念与常识 Java 语言有哪些特点? 简单易学(语法简单,上手容易);面向对象(封装,继承,多态);平台无关性( Java 虚拟机实现平台无关性);支持多线程( C++ 语言没有内置的多线程机制,因此必须调用操作系统的多线程功能来进行多线程…

vue elementui table给表格中满足条件的每一条记录添加计时器

需求&#xff1a; 在前端给表格中给满足条件的每一条记录增加一个计时器&#xff0c;用于计算工作时长。 1.数据库中存储的有每条记录的作业开始时间&#xff0c;将当前时间和作业开始时间计算一个差值&#xff0c;作为作业时长的初始值&#xff1b; 2.把满足条件的每条记录绑…

Java中对象的比较

1. 对象的比较 在Java中&#xff0c;基本类型的对象可以直接比较大小&#xff0c;而自定义类型却不能 class Card {public int rank; // 数值public String suit; // 花色public Card(int rank, String suit) {this.rank rank;this.suit suit;}}public class TestPriori…

2008-2022年 全国31省-环境污染综合指数

环境污染综合指数是一个衡量环境污染程度或环境质量等级的抽象概括数值。它能够综合反映不同环境要素的污染情况&#xff0c;例如水污染指数和大气污染指数等。环境空气质量综合指数&#xff08;Air Quality Index, AQI&#xff09;是专门用来描述城市环境空气质量状况的一个指…

C++进阶之AVL树

个人主页&#xff1a;点我进入主页 专栏分类&#xff1a;C语言初阶 C语言进阶 数据结构初阶 Linux C初阶 C进阶​ ​​​​算法 欢迎大家点赞&#xff0c;评论&#xff0c;收藏。 一起努力&#xff0c;一起奔赴大厂 目录 一.前言 二.插入 三.旋转 3.1右旋 …

如何利用数据仓库进行业务分析:一名大数据工程师的视角

在大数据时代&#xff0c;数据的有效利用对企业的成功至关重要。 本文将基于上面的流程图&#xff0c;详细介绍如何利用数据仓库进行业务分析&#xff0c;并提供实际的例子和代码演示&#xff0c;以帮助读者更好地理解和应用相关技术。 数据仓库的基本流程 上图展示了一个典…

莱辅络Rebro BIM机电专业软件

莱辅洛&#xff08;Rebro&#xff09;是一款专业机电 BIM 软件。它具备专业人士所期待的各种专业功能&#xff0c;应用于建筑机电工程的三维设计&#xff0c;并且适用于建筑、结构、给排水、暖通、电气五大专业。 该软件具有以下特点&#xff1a; • 3D 模型&#xff1a;可以…

1.接口测试-postman学习

目录 1.接口相关概念2.接口测试流程3.postman基本使用-创建请求&#xff08;1&#xff09;环境&#xff08;2&#xff09;新建项目集合Collections&#xff08;3&#xff09;新建collection&#xff08;4&#xff09;新建模块&#xff08;5&#xff09;构建请求请求URLheader设…

常见的创建型设计模式( 一 )

设计模式( 一 ) 常见的创建型设计模式 1.单例模式 : 确保一个类只有一个实例 , 为整个程序提供一个全局的访问接口。getInstance 实现方式 饿汉式&#xff0c;在调用getInstance 创建实例的时候 &#xff0c;实例已经存在了 &#xff0c;不需要我们再次去 new创建。 优点&a…

修复 Android 手机卡在启动屏幕上的 7 种方法

Android 手机卡在启动屏幕上的情况并不常见。通常&#xff0c;问题出现在应用新更新或安装未知来源的应用程序后。幸运的是&#xff0c;您可以让您的 Android 手机跳过启动屏幕&#xff0c;而无需前往最近的服务中心。 当您的 Android 手机在启动屏幕上陷入无限循环时&#xf…

标准立项 | 《温室气体排放核算与报告要求 废油资源化企业》

《温室气体排放核算与报告要求 废油资源化企业》适用于废油资源化行业企业温室气体排放量的核算和报告。从事废油资源化生产的企业&#xff0c;均可参考该标准核算企业的温室气体排放量&#xff0c;并编制企业温室气体排放报告。 参编咨询&#xff1a;中华环保联合会水环境治理…

ECharts 蓝色系-荧光图标折线图01案例

ECharts 蓝色系-荧光图标折线图01案例 图表意义 本折线图案例展示了一周内不同路线的使用情况或数据统计。通过折线的上升和下降&#xff0c;可以直观地观察到每条路线的流量或数据变化趋势&#xff0c;从而进行分析和决策。 效果预览 效果图展示不同路线的数据统计和个性化…

<Rust><iced>在iced中显示gif动态图片的一种方法

前言 本文是在rust的GUI库iced中在窗口显示动态图片GIF格式图片的一种方法。 环境配置 系统&#xff1a;window 平台&#xff1a;visual studio code 语言&#xff1a;rust 库&#xff1a;iced、image 概述 在iced中&#xff0c;提供了image部件&#xff0c;从理论上说&…

链表中环的入口节点

链表中环的入口节点 描述 链表中环的入口节点 给一个长度为n链表&#xff0c;若其中包含环&#xff0c;请找出该链表的环的入口结点&#xff0c;否则&#xff0c;返回null。 数据范围&#xff1a; n≤10000&#xff0c; 1<结点值<10000 要求&#xff1a;空间复杂度 O(1)…