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"/>
  • 相关阅读:
    mysql备份还原
    matlab学习笔记一
    tic和toc用来记录matlab命令执行的时间
    Flume的JVM优化策略
    Linux中的grep -R命令详解
    Hadoop集群Unhealthy Nodes导致计算能力下降解决方法 (nodemanager处于Unhealthy Nodes)
    Java匿名内部类详解
    Error:java: Compilation failed: internal java compiler error 解决办法
    java基础知识体系
    使用flink SQL对接kafka 时,日志不报错,也没有数据输出,原因有哪几个方面
  • 原文地址:https://www.cnblogs.com/WarBlog/p/15138526.html
Copyright © 2011-2022 走看看