CAS 单点登录【2】自定义用户验证

方案1:CAS默认的JDBC扩展方案:

CAS自带了两种简单的通过JDBC方式验证用户的处理器。

这两个处理类位于cas-server-support-jdbc这个扩展工程下。

第一步:改写用户验证处理器

deployerConfigContext.xml

把他替换成为 下面两种其中任意一个bean皆可。

把对应的用户表名、用户名、密码替换成为 你实际数据库中的 用户表名、用户名、密码对应的字段名称。

第二步:加载驱动(oracle、mysql任选一种),连接数据库

依然在这个文件中deployerConfigContext.xml,在最后一个标签之前,加上下面配置即可(oracle、mysql任选其一)。

第三步:导入必要的jar包

cas-server-webapp的pom.xml

重新启动项目,在登录页验证即可。

方案2:套用原有项目的用户登录逻辑( 非JDBC方式 )

背景:

1.因为是要整合多个项目的登录功能,换句话说,就是原有的项目其实分别都有已经实现的用户登录逻辑页面、登录逻辑,并且是经过了大量测试,程序逻辑比较健壮。
2.原有的项目并不是通过JDBC方式来访问数据库的,为了保持代码风格统一,最好与其他项目保持一致,或者直接套用原有的验证逻辑。(比如:我们项目使用的是Mybatis方式)
3.CAS扩展的JDBC验证方式还是过于简单,对于复杂的验证逻辑不便于扩展。

第一步:自定义一个用户验证处理器

可以在原有的cas-server-support-jdbc工程下,也可以自己新建一个工程

注意:本类要继承这个类 AbstractUsernamePasswordAuthenticationHandler

第二步:自定义异常处理器

因为CAS原有的异常处理逻辑是,只能通过errorcode去messages_zh_CN.properties寻找已经中定义好的异常消息,

如果找不到直接返回errorcode到页面,并不支持直接抛出文字形式的异常消息。还需要为每种异常都定义专属的异常类,例如:

BadCredentialsAuthenticationException.java

BadPasswordAuthenticationException.java

BadUsernameOrPasswordAuthenticationException.java

而本异常类可以直接接受Api抛出的所有异常,或者也可以自定义文字形式的异常消息。如:new Exception(“这是异常消息”)

同样也支持原有的根据errorCode读取异常消息的方式。

第三步:修改deployerConfigContext.xml

方案1中,在配置文件中配置了

JDBC方式的处理器bean、 连接数据库的BasicDataSource bean这里统统不需要。

直接找到这个处理器

把他替换成为自定义的验证处理器。

因为,访问数据库以及验证用户逻辑的处理都在UserApi中做处理,不需要CAS再做处理了。

第四步:pom.xml加载自定义的工程或者被修改的工程jar包

cas-server-webapp的pom.xml

或者用户自定义的项目

Original: https://www.cnblogs.com/java-class/p/8393564.html
Author: Orson
Title: CAS 单点登录【2】自定义用户验证

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/536982/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

  • Java—泛型

    泛型出现的原因 Java的泛型是在JDK1.5开始才加上的。在此之前的Java是没有泛型的。没有泛型的Java使用起来给人感觉非常的笨重,为了体会泛型带来的好处,来看看如果没有泛型…

    Java 2023年6月7日
    069
  • 数据库系统概论小结(四)【面向考试】

    数据库系统概论小结(四)【面向考试】 第五章 数据库完整性 数据库的完整性指数据的正确性和相容性。 正确性:符合现实世界的描述。 相容性:同一对象在不同表里面是符合逻辑的。 维护完…

    Java 2023年6月16日
    082
  • 【java8】stream学习笔记

    一、什么是Stream Stream是java8的新增特性,表示数据流。 二、Stream的特点 所有的流操作都可以串行执行或者并行执行。除非显示的创建并行流,否则默认创建串行流。…

    Java 2023年6月9日
    0107
  • Java 设计模式 – Observer 观察者模式

    说明都在注释: package ObserverModel; package ObserverModel; <span class="hljs-keyword&qu…

    Java 2023年6月9日
    055
  • Java反射+简单工厂模式总结

    除了 new 之外的创建对象的方法 通过 new 创建对象,会使得程序面向实现编程,先举个例子,某个果园里现在有两种水果,一种是苹果,一种是香蕉,有客户想采摘园子里的水果,要求用g…

    Java 2023年5月29日
    080
  • 基于CAS实现SSO单点登录

    1. 概述 1.1. 什么是SSO? 单点登录( Single Sign-On , 简称 SSO )是目前比较流行的服务于企业业务整合的解决方案之一, SSO 使得在多个应用系统中…

    Java 2023年5月29日
    0167
  • Mybatis动态查询

    😎多条件的查询 if 根据标签中test的属性所对应的表达式决定标签中的内容是否拼接到sql语句中 select * from t_user where ‘cwlz’=’cwlz’…

    Java 2023年6月8日
    088
  • GDB高级一点的命令

    GDB 是我们平时调试 c/c++程序的利器, 查起复杂的 bug 问题,比打印大法要好的多,但是也不得不说, gdb 在默认情况下用起来并不是很好用,最近学习到几个高级点的技巧,…

    Java 2023年5月29日
    074
  • Linux 基于flock命令实现多进程并发读写文件控制

    需求描述 实际项目中,需要在Linux下通过 shell脚本并发读写同一个文件,但是希望同一时刻,只有一个进程可以在读、写目标文件。 解决方案 使用 flock命令。 flock …

    Java 2023年6月16日
    094
  • 设计模式二:webMVC

    model:观察者模式,对view和controller一无所知,即完全decouple。仅知道有observer需要它去通知 view:组合模式实现的jsp等用户界面。当发生页面…

    Java 2023年6月9日
    063
  • H3CNE学习笔记

    1.IP的主要作用 2.IP网络的结构 3.路由器和交换机的选择 路由器通常用来连接多个网段(路由器的一个接口相当于一个网段) 交换机通常用来连接多个PC机形成一个网段 4.sou…

    Java 2023年6月6日
    080
  • day01-需求分析和系统设计

    对传输数据的分析: 因为在通讯的时候信息的种类和信息比较多,如果使用文本的方式来传递数据,那么服务器拿到信息的时候对其进行拆解会很麻烦。因此使用对象的方式来进行数据的传输(同时使用…

    Java 2023年6月15日
    081
  • 第七周总结-vue脚手架整合SSM-路由配置

    使用axios异步 用户列表 编号 姓名 年&#x9F…

    Java 2023年6月7日
    0103
  • Spring Boot 入门(二)单元测试

    *创建测试 选中类名,使用快捷键”Alt+Enter”,选择”Create Test” 勾选被测试的成员 编写单元测试 packag…

    Java 2023年6月5日
    076
  • 28.多线程,分组服务端,1万客户端连接,代码优化

    客户端只发送数据,服务端只接收数据。 服务端增加,用户接入,离开函数。 客户端增加,判断是否成功连接服务端标志。 问题:服务端接收客户端数据包,不稳定,波动比较大。 客户端代码: …

    Java 2023年5月29日
    075
  • Python递归遍历目录并删除文件中的前N行

    1 import os 2 3 # 遍历目录下的所有文件 4 def check_file(file_path): 5 os.chdir(file_path) 6 print(os…

    Java 2023年6月7日
    075
亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球