文章来源于网络收集而来,版权归原创者所有,如有侵权请及时联系!
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 的使用基本上就和大家介绍完了,接下来我们通过源码,对其原理进行深入分析。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论