文章来源于网络收集而来,版权归原创者所有,如有侵权请及时联系!
6.4 二次校验
二次校验就是将系统中的资源分为敏感的和不敏感的,如果用户使用了 RememberMe 的方式登录,则访问敏感资源时会自动跳转到登录页面,要求用户重新登录;如果使用了用户名/密码的方式登录,则可以访问所有资源。这种方式相当于牺牲了一点用户体验,但是却换取了系统安全。
配置方式也很简单,首先我们提供三个测试接口,代码如下:
@RestController public class HelloController { @GetMapping("/hello") public String hello() { return "hello"; } @GetMapping("/admin") public String admin() { return "admin"; } @GetMapping("/rememberme") public String rememberme() { return "rememberme"; } }
现在假设:
(1)/hello 接口:认证后才可以访问,无论通过何种认证方式。
(2)/admin 接口:认证后才可以访问,但是必须是通过用户名/密码的方式认证。
(3)/rememberme 接口:认证后才可以访问,但是必须是通过 RememberMe 的方式认证。
在 SecurityConfig 中进行配置(在 6.3 节的 SecurityConfig 基础上修改 HttpSecurity 配置即可):
@Configuration public class SecurityConfig extends WebSecurityConfigurerAdapter { //省略其他配置 @Override protected void configure(HttpSecurity http) throws Exception { http.authorizeRequests() .antMatchers("/admin").fullyAuthenticated() .antMatchers("/rememberme").rememberMe() .anyRequest().authenticated() .and() .formLogin() .and() .rememberMe() .key("javaboy") .tokenRepository(jdbcTokenRepository()) .and() .csrf().disable(); } }
配置完成后,重启项目进行测试。使用用户名/密码登录成功后,访问/hello 接口和/admin 接口是没有问题的。如果访问/rememberme 接口,则会出现如图 6-6 所示的错误提示,表示没有权限访问。
图 6-6 基于用户名/密码登录成功后没有权限访问/rememberme 接口
此时关闭浏览器再重新打开,就可以访问/rememberme 接口了,但是如果去访问/admin 接口,则系统会自动跳转到登录页面,要求用户重新登录。
至此,RememberMe 的使用基本上就和大家介绍完了,接下来我们通过源码,对其原理进行深入分析。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论