在上一篇文章 史上最简单的Spring Security教程(三十一):默认用户名密码登录新增RememberMe(记住我)选项 中,介绍了如何基于 Spring Security 框架默认的用户名密码登录,添加 记住我 选项。如前面文章所述,一个系统的登录方式不止一种,本文即介绍一下如何基于 Spring Security 框架默认的用户名密码登录,添加 记住我 选项后,与CA登录方式共存。 废话不多说,直接看配置。 首先,改造一下登录页,在此前的基础上,新增 CA登录 方式。
<div id="login" class="tab-pane active"> <form th:action="@{/login}" method="post" th:method="post" class="mt-1"> <div class="form-group"> <input type="text" class="form-control" name="username" placeholder="用户名"> div> <div class="form-group"> <input type="password" class="form-control" name="password" placeholder="密码"> div> <div class="checkbox"> <label><input type="checkbox" name="remember-me"> 记住我label> div> <button type="submit" class="btn btn-primary btn-block mb-1 mt-1">登录button> <p class="text-muted text-center"> <a href="login.html#"> <small>忘记密码了?small>a> | <a href="#">注册一个新账号a> p> form>div><div id="ca_login" class="tab-pane"> <form th:action="@{/certificate_authority_login}" method="post" th:method="post" class="mt-1"> <div class="form-group"> <input type="text" class="form-control" name="signature" value="3691308F2A4C2F6983F2880D32E29C84" readonly /> div> <button type="submit" class="btn btn-primary btn-block mb-1 mt-1">登录button> <p class="text-muted text-center"> <a href="login.html#"> <small>忘记密码了?small>a> | <a href="#">注册一个新账号a> p> form>div>
然后,修改 Spring Security 配置,新增 CA登录及认证相关配置。
@EnableWebSecurity@Configurationpublic class SpringSecurityConfiguration extends WebSecurityConfigurerAdapter { ...... @Override protected void configure(HttpSecurity http) throws Exception { http ...... .rememberMe() .userDetailsService(userDetailsService()) .tokenValiditySeconds(14 * 24 * 60 * 60) ...... ; http.addFilterBefore(certificateAuthorityAuthenticationFilter(), UsernamePasswordAuthenticationFilter.class); http.addFilterAfter(customFilterSecurityInterceptor(), FilterSecurityInterceptor.class); } ...... 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; } ......}
关于 CA登录方式的配置,在此前的文章
史上最简单的Spring Security教程(二十八):CA登录与默认用户名密码登录共存详细实现及配置
中,已经详细介绍过,可以直接拿过来使用。
系统改造完毕,启动,并访问首页,首先便是登录,我们先尝试用户名密码登录方式。
注意, 一定要记得勾选 记住我 选项哦!
关闭浏览器,直接访问系统首页,此时,仍然可以直接访问,并没有重定向到登录页,无需输入用户名、密码。相同的,重启应用之后,同样可以直接访问系统首页,也无需输入用户名、密码。
然后,我们退出系统,切换到 CA登录 方式,也可以正常登录系统。