zoukankan      html  css  js  c++  java
  • springsecurity 记住我

    原理分析

    1、用户登录通过UsernamePasswordAuthenticationFilter认证请求处理,

    2、通过RememberMeServices对象中的onLoginSuccess方法完成登录成功后的处理,

      2.1、TokenRepository对象生成token字符

      2.2、RememberMeServices对象的addCookie方法将生成的token字符串存储到Cookie中

      2.3、token字符串存储到数据库中

    3、用户再次访问

    4、RememberMeAuthenticationFilter过滤器中读取Cookie中的Token字符串

    5、判断读取的Token字符串和数据库中的存储数据是否一致,并且返回UserDetailsService

    用法

    cookie读写RememberMeAuthenticationFilter过滤器已经完成,现在就缺少数据库存储,数据库相关的就需要配置数据源

    1、创建表

    CREATE TABLE persistent_logins (username VARCHAR(64) NOT NULL, 
    series VARCHAR(64) PRIMARY KEY,
    token VARCHAR(64) NOT NULL, 
    last_used TIMESTAMP NOT NULL)

    2、配置操作数据库表,在SecurityConfig配置类

        @Autowired
        DataSource dataSource;
    
        public PersistentTokenRepository persistentTokenRepository(){
            JdbcTokenRepositoryImpl jdbcTokenRepository = new JdbcTokenRepositoryImpl();
            jdbcTokenRepository.setDataSource(dataSource);
            //jdbcTokenRepository.setCreateTableOnStartup(true); //自动创建token相关数据表
            return jdbcTokenRepository;
        }

    3、配置记住我

        //授权:针对url的设置
        @Override
        protected void configure(HttpSecurity http) throws Exception {
                    http.authorizeRequests().anyRequest().authenticated().
                            and().
                            formLogin()
                            .and()
    
                            .rememberMe()
                            .tokenRepository(persistentTokenRepository())
                            .tokenValiditySeconds(60)//设置有效时长,单位:秒
                            .userDetailsService(userDetailsServiceImpl)
    .and() .csrf().disable(); }

    4、画面设计

    注意:自定义登录页面时【记住我】的组件name属性值是remember-me,通过rememberMeParameter修改默认值

    <input type="checkbox" name="remember-me"/>
  • 相关阅读:
    Python3标准库:fnmatch UNIX式glob模式匹配
    Python3标准库:glob文件名模式匹配
    Python3标准库:pathlib文件系统路径作为对象
    Python3标准库:os.path平台独立的文件名管理
    Python3标准库:statistics统计计算
    36-Docker 的两类存储资源
    第四章-操作列表
    35-外部世界如何访问容器?
    34-容器如何访问外部世界?
    33-容器间通信的三种方式
  • 原文地址:https://www.cnblogs.com/WarBlog/p/15138526.html
Copyright © 2011-2022 走看看