首先感谢 这位博主,我参考了他的,他写的还是很详细的,https://blog.csdn.net/zhouzhiwengang/article/details/97926358
我看它实现了全自定义形式;我走另外一种,实质是一样的,因为我当时这样的想的,我只需要加一个验证码就可以了,其他的还是用cas框架提供的就行了,我按照这个思路缕了下源码,请看下面的吧。
我研究了下,我把研究思路贴出来。
首先研究源码最起码框架的默认的必定要走的代码那里打上断点;一旦就可以跟踪代码上下看看,就知道了
首先这是系统启动时扫描的,注意看,这我画框的标注
第二步,我们主要看这个
QueryDatabaseAuthenticationHandler h = new QueryDatabaseAuthenticationHandler(b.getName(), this.servicesManager, this.jdbcPrincipalFactory(), b.getOrder(), JpaBeans.newDataSource(b), b.getSql(), b.getFieldPassword(), b.getFieldExpired(), b.getFieldDisabled(), CollectionUtils.wrap(attributes));
h.setPasswordEncoder(PasswordEncoderUtils.newPasswordEncoder(b.getPasswordEncoder()));
这两行是我们关注的,其他的,只是一些辅助的,我暂时还没看;
第一行就是验证,有效性的;第二行是确定生成加密实例的
ok,我们看看第一行的代码就知道了
这一块就是具体校验的部分,有时间可以看看,,
我们看看第二行代码,逻辑:h.setPasswordEncoder(PasswordEncoderUtils.newPasswordEncoder(b.getPasswordEncoder()));
ok,分析到这里,基本上就可以实现我们自定义登陆校验了,例如加上图片验证码,或者短信验证码之类的都是可以的;
其实网上也有一种继承这个类AbstractPreAndPostProcessingAuthenticationHandler 也是可以的,我这个人比较懒,我只需要加个验证码,其他的都共用cas框架提供的,这样既能满足使用框架的快捷,也能满足我,当然,如果不想依赖框架,可以继承这个类即可;
已经实现了,后面有时间在补上吧,
写了这几个类,就可以了,
时间不早了,先睡觉;2020年8月19日00:05:52
-------------------------------------------------------------------------------------------------------------------------------------
我把整个流程的调用链画一下
1、CustomUsernamePasswordCaptchaAuthenticationHandler 这个类是我定义的认证处理类,具体方法authenticateUsernamePasswordInternal
2、AbstractCustomUsernamePasswordAuthenticationHandler doAuthentication
3、AbstractPreAndPostProcessingAuthenticationHandler 抽象的前处理和后处理认证处理程序 authenticate 认证方法
4、PolicyBasedAuthenticationManager 基于策略的身份验证管理器 authenticateAndResolvePrincipal 验证并解析方法 这个比较重要
着重说下PolicyBasedAuthenticationManager 基于策略的身份验证管理器
从这里可以看出,这个方法,主要接收了前台给我们的数据,,其实源码往上我也看了,就是webflow流程+cas的相关解析,然后调用这个类类的方法,对我们来说,看到这里就可以了,完全可以重写cas 的程序了
这个就是根据证书不同进行迭代了,找到对应的handle处理器
细节方面我也没仔细看,和springsecurity 比较像,思想差不多;
我这边给出源码,有需要的,请下载后运行即可