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"/>
  • 相关阅读:
    C++ 中复杂的声明
    指向成员的指针
    指针与引用的操作符
    char指针
    软件测试
    网络应用层协议
    BOOL,int,float,指针变量与零值比较的if语句
    有关单向链表的题目
    main方法执行之前,做什么事
    C++复制控制
  • 原文地址:https://www.cnblogs.com/WarBlog/p/15138526.html
Copyright © 2011-2022 走看看