美文网首页服务治理
spring security使用篇 记住我功能原理以及实现

spring security使用篇 记住我功能原理以及实现

作者: 怪诞140819 | 来源:发表于2018-10-13 10:24 被阅读132次

1.原理解析

1.1 记住我基本原理

记住我基本功能原理
  • 客户端发送请求认证
  • UsernamePasswordAuthenticationFilter认证成功后调用RemeberMeService生成token
  • TokenRepository将token存入数据库
  • RemeberMeService将token写入浏览器cookie
  • 服务再次请求的时候,RemeberMeAuthencationFilter读取到cookie中的token
  • 根据token到数据库查找,如果查找到,然后拿到username,然后再通过UserDetailsService获取到用户信息,存入session中。

1.2 RemeberMeAuthencationFilter

image.png
  • RemeberMeAuthencationFilter位置相对靠后,当其他的过滤器没有进行认证成功,RemeberMe回去尝试进行认证

2.实现

2.1 注入一个PersistentTokenRepository的Bean

对于注释的创建表的代码可以在第一次执行完后进行注释,也可以跟到代码拿到从建表语句,自己创建,然后不需要这行代码

    @Bean
    public PersistentTokenRepository persistentTokenRepository(){
        JdbcTokenRepositoryImpl tokenRepository = new JdbcTokenRepositoryImpl();
        tokenRepository.setDataSource(dataSource);
        //tokenRepository.setCreateTableOnStartup(true);
        return tokenRepository;
    }

2.2 HttpSecurity配置

 http.anyRequest()
            .authenticated()
            .and()
            .rememberMe()
            .tokenRepository(persistentTokenRepository())
            .tokenValiditySeconds(securityProperties.getBrowser().getTokenValiditySeconds())
            .userDetailsService(userDetailsService)
  • tokenRepository(persistentTokenRepository())配置tokenRepository
  • .tokenValiditySeconds(securityProperties.getBrowser().getTokenValiditySeconds())配置token的过期时间
  • .userDetailsService(userDetailsService)配置userDetailsService因为记住我的功能需要根据token获取username,然后userDetailsService根据username去获取到用户的数据

2.3 html中的处理

<input name="remember-me" type="checkbox" value="true" />记住我
  • 这里做的是表单提交,其他做响应的处理。但是参数的name值必须是remember-me,value为true或者fasle

相关文章

网友评论

    本文标题:spring security使用篇 记住我功能原理以及实现

    本文链接:https://www.haomeiwen.com/subject/oktoaftx.html