前面我们讲了CA登录方式的详细实现及配置,也讲了如何改造默认的用户名密码登录方式,添加验证码登录选项。本次,我们就将这两种方式融合在一起,实现共存,以达到用户可以自由选择验证码登录、CA登录方式。
其实,重要的逻辑在前面的文章中都以实现过,本次只需合并相应逻辑到一起即可。然后,修改 Spring Security 配置,以实现两种登录方式的共存。
@EnableWebSecurity@Configurationpublic class SpringSecurityConfiguration extends WebSecurityConfigurerAdapter {......@Overrideprotected void configure(HttpSecurity http) throws Exception {......http.addFilterBefore(certificateAuthorityAuthenticationFilter(), UsernamePasswordAuthenticationFilter.class);http.addFilterAt(usernamePasswordAuthenticationFilter(), UsernamePasswordAuthenticationFilter.class);http.addFilterAfter(customFilterSecurityInterceptor(), FilterSecurityInterceptor.class);}@Overrideprotected void configure(AuthenticationManagerBuilder auth) throws Exception {auth.authenticationProvider(certificateAuthorityDaoAuthenticationProvider()).userDetailsService(customJdbcUserDetailsService()).passwordEncoder(new BCryptPasswordEncoder());}private AbstractAuthenticationProcessingFilter certificateAuthorityAuthenticationFilter() throws Exception {CertificateAuthorityAuthenticationFilter authorityAuthenticationFilter = new CertificateAuthorityAuthenticationFilter();authorityAuthenticationFilter.setAuthenticationSuccessHandler(certificateAuthorityAuthenticationSuccessHandler());authorityAuthenticationFilter.setAuthenticationFailureHandler(certificateAuthorityAuthenticationFailureHandler());authorityAuthenticationFilter.setAuthenticationManager(authenticationManager());return authorityAuthenticationFilter;}private AuthenticationProvider certificateAuthorityDaoAuthenticationProvider() {CertificateAuthorityDaoAuthenticationProvider certificateAuthorityDaoAuthenticationProvider = new CertificateAuthorityDaoAuthenticationProvider();certificateAuthorityDaoAuthenticationProvider.setUserDetailsService(certificateAuthorityJdbcUserDetailsService());return certificateAuthorityDaoAuthenticationProvider;}......}
其实说到底,就是配置两个Filter,即 UsernamePasswordCaptchaAuthenticationFilter、CertificateAuthorityAuthenticationFilter。
配置完成后,启动系统,先使用验证码方式登录。
输入相应的用户名、密码、验证码之后,可正常访问系统。
然后,退出登录,切换到CA登录方式,登录系统,也可以正常登录系统,改造完成。
其它详细源码,请参考文末源码链接,可自行下载后阅读。
我是银河架构师,十年饮冰,难凉热血,愿历尽千帆,归来仍是少年!
如果文章对您有帮助,请举起您的小手,轻轻【三连】,这将是笔者持续创作的动力源泉。当然,如果文章有错误,或者您有任何的意见或建议,请留言。感谢您的阅读!
源码
github
/liuminglei/SpringSecurityLearning/tree/master/30
gitee
/xbd521/SpringSecurityLearning/tree/master/30
如果喜欢我们的文章
可以关注我们
也可以点击右下角的在看告诉我们
期待与您相遇
史上最简单的Spring Security教程(三十):自定义用户名密码及验证码登录与CA登录方式共存详细实现及配置