3.2 密码编码器

一、密码编译器

  1. SpringSecurity具有自己的密码编译器

  2. SpringSecurity提供了多种密码编码器

  3. Spring存在多种编码器的共存:DelegatingPasswordEncoder,允许以不同的格式验证密码,提供升级的可能性

    @Bean
    public PasswordEncoder passwordEncoder() {
        // 默认编码算法的id,新的密码编码都会使用这个id对应的编码器
        val idForEncode = "bcrypt";
        // 要支持的多种编码器(map)
        val encoders = Map.of(
        	idForEncode, new BCryptPasswordEncoder(),
            "SHA-1", new MessageDigestPasswordEncoder("SHA-1")
        );
        return new DelegatingPasswordEncoder(idForEncoder, encoders);
    }
  4. 如果使用了多编码形式,在密码存储时候需要在密码前面加上map的key,即{id}encodedPassword形式存储;

  5. 手动密码匹配:encoder.matches(CharSequence, String)

  6. 密码升级:实现UserDetailsPasswordService中的updatePassword方法

最后更新于