【CAS6.6源码解析】授权过程异常调试 (认证信息无效 <1 errors, 0 successes>)

本文主要是介绍【CAS6.6源码解析】授权过程异常调试 (认证信息无效 <1 errors, 0 successes>),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

在CAS启动后,经常会出现第一次配置某种授权策略不熟悉,导致登录页面输入理想中正确的账号密码,实际上页面显示认证信息无效,查看控制台也没有报错,很是苦恼。这里分享一个从源码调试层面去解决这个问题的办法。


文章目录

  • 1.问题
  • 2.调试方法
  • 3.找到核心问题并解决


1.问题

场景:想新添加了一种是授权策略,但是因为不熟悉,大部分都只能从网上找一些解决方案,简单粗暴的复制粘贴尝试,输入理想中的账号密码后,发现认证信息无效,查看控制台信息,除了warn之外也没有什么报错,于是陷入了一种排查问题的窘境。

在这里插入图片描述
在这里插入图片描述

2.调试方法

这里以JDBC授权策略为例,尝试走一遍整个调试流程。其他问题都是这样的调试流程。

虽然上述场景里提到了没有任何报错,但是好在有一个warn,这个warn就是解决问题的关键。这个warn提示了有一个error,那么就尝试调试error是怎么产生的:

在这里插入图片描述
1.在DefaultCasDelegatingWebflowEventResolver类中添加断点,这里获取授权的handler时如果出现异常了,会进行处理,并且在控制台输出warn信息。(如果是源码调试可以直接搜到这个类,如果是overlay方式可以在IDEA反编译的class文件里断点调试)

在这里插入图片描述

2.正常输入账号密码,逐步步过调试异常产生于哪一行。比如我这里异常产生于69行,到了这一行,就直接跳进异常了。

在这里插入图片描述

在这里插入图片描述

3.查看exception的handlerErrors,查看堆栈,找到异常根源:

在这里插入图片描述

在这里插入图片描述
点击旁边的Navigate直接跳转到引起异常的代码处。
在这里插入图片描述

这样核心问题就找到了。

3.找到核心问题并解决

接下来,就是调试这个抛出异常的方法。这个和具体遇到的问题相关,这里调试下这个例子的问题。

通过调试可以发现,目前使用的是DefaultPasswordEncoder。
在这里插入图片描述
而默认Encoder,如果没有指定编码算法,将会直接返回null,这个null就会导致抛出异常:

在这里插入图片描述
所以这个问题的最终解决方案就是:

  • 不指定passwordEncoder,这样就不会去进行编码。
  • 或者指定编码的具体算法,如md5。
    在这里插入图片描述

ATFWUS 2023-07-21

这篇关于【CAS6.6源码解析】授权过程异常调试 (认证信息无效 <1 errors, 0 successes>)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/363457

相关文章

Django HTTPResponse响应体中返回openpyxl生成的文件过程

《DjangoHTTPResponse响应体中返回openpyxl生成的文件过程》Django返回文件流时需通过Content-Disposition头指定编码后的文件名,使用openpyxl的sa... 目录Django返回文件流时使用指定文件名Django HTTPResponse响应体中返回openp

Linux线程同步/互斥过程详解

《Linux线程同步/互斥过程详解》文章讲解多线程并发访问导致竞态条件,需通过互斥锁、原子操作和条件变量实现线程安全与同步,分析死锁条件及避免方法,并介绍RAII封装技术提升资源管理效率... 目录01. 资源共享问题1.1 多线程并发访问1.2 临界区与临界资源1.3 锁的引入02. 多线程案例2.1 为

批量导入txt数据到的redis过程

《批量导入txt数据到的redis过程》用户通过将Redis命令逐行写入txt文件,利用管道模式运行客户端,成功执行批量删除以Product*匹配的Key操作,提高了数据清理效率... 目录批量导入txt数据到Redisjs把redis命令按一条 一行写到txt中管道命令运行redis客户端成功了批量删除k

分布式锁在Spring Boot应用中的实现过程

《分布式锁在SpringBoot应用中的实现过程》文章介绍在SpringBoot中通过自定义Lock注解、LockAspect切面和RedisLockUtils工具类实现分布式锁,确保多实例并发操作... 目录Lock注解LockASPect切面RedisLockUtils工具类总结在现代微服务架构中,分布

Win10安装Maven与环境变量配置过程

《Win10安装Maven与环境变量配置过程》本文介绍Maven的安装与配置方法,涵盖下载、环境变量设置、本地仓库及镜像配置,指导如何在IDEA中正确配置Maven,适用于Java及其他语言项目的构建... 目录Maven 是什么?一、下载二、安装三、配置环境四、验证测试五、配置本地仓库六、配置国内镜像地址

深度解析Spring Security 中的 SecurityFilterChain核心功能

《深度解析SpringSecurity中的SecurityFilterChain核心功能》SecurityFilterChain通过组件化配置、类型安全路径匹配、多链协同三大特性,重构了Spri... 目录Spring Security 中的SecurityFilterChain深度解析一、Security

Python实现网格交易策略的过程

《Python实现网格交易策略的过程》本文讲解Python网格交易策略,利用ccxt获取加密货币数据及backtrader回测,通过设定网格节点,低买高卖获利,适合震荡行情,下面跟我一起看看我们的第一... 网格交易是一种经典的量化交易策略,其核心思想是在价格上下预设多个“网格”,当价格触发特定网格时执行买

SQL Server跟踪自动统计信息更新实战指南

《SQLServer跟踪自动统计信息更新实战指南》本文详解SQLServer自动统计信息更新的跟踪方法,推荐使用扩展事件实时捕获更新操作及详细信息,同时结合系统视图快速检查统计信息状态,重点强调修... 目录SQL Server 如何跟踪自动统计信息更新:深入解析与实战指南 核心跟踪方法1️⃣ 利用系统目录

全面解析Golang 中的 Gorilla CORS 中间件正确用法

《全面解析Golang中的GorillaCORS中间件正确用法》Golang中使用gorilla/mux路由器配合rs/cors中间件库可以优雅地解决这个问题,然而,很多人刚开始使用时会遇到配... 目录如何让 golang 中的 Gorilla CORS 中间件正确工作一、基础依赖二、错误用法(很多人一开

Java.lang.InterruptedException被中止异常的原因及解决方案

《Java.lang.InterruptedException被中止异常的原因及解决方案》Java.lang.InterruptedException是线程被中断时抛出的异常,用于协作停止执行,常见于... 目录报错问题报错原因解决方法Java.lang.InterruptedException 是 Jav