返回介绍

6.4 二次校验

发布于 2025-04-26 13:16:45 字数 1931 浏览 0 评论 0 收藏

二次校验就是将系统中的资源分为敏感的和不敏感的,如果用户使用了 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 的使用基本上就和大家介绍完了,接下来我们通过源码,对其原理进行深入分析。

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。