本文主要是介绍【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>)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!