加密自定义密码配置



我正在更改密码,然后转发到/loginuser 并重定向到用户仪表板。 自从我是初学者以来,我就使用 httpbasic 身份验证保护了这一点,我在休眠中使用 createNativeSQLQuery 并从数据库中获取结果。我是否必须实现任何用户详细信息服务接口 Spring 安全性?我的目标是只实现加密密码并将其存储数据库。我面临的问题是,我添加了一个 Bean 配置,例如,

@Bean
        public PasswordEncoder customPasswordEncoder() {
            return new BCryptPasswordEncoder(){
                @Override
                public String encode(CharSequence rawPassword) {
                    return BCrypt.hashpw(rawPassword.toString(), BCrypt.gensalt(4));
                }
                @Override
                public boolean matches(CharSequence rawPassword, String encodedPassword) {
                    return BCrypt.checkpw(rawPassword.toString(), encodedPassword);
                }
            };
        }

我不知道为什么它会抛出这个异常。 我们应该对盐轮进行硬编码吗?

java.lang.IllegalArgumentException: Invalid salt
    at org.springframework.security.crypto.bcrypt.BCrypt.hashpw(BCrypt.java:552) ~[spring-security-core-5.1.5.RELEASE.jar:5.1.5.RELEASE]
    at org.springframework.security.crypto.bcrypt.BCrypt.checkpw(BCrypt.java:659) ~[spring-security-core-5.1.5.RELEASE.jar:5.1.5.RELEASE]
    at com.bootapp.FullTimeEquivalents.config.PasswordEncoderConfig$1.matches(PasswordEncoderConfig.java:29) ~[classes/:na]
我认为

您有问题,因为您的编码密码长度<28,来自弹簧来源:

if (saltLength < 28) {
            throw new IllegalArgumentException("Invalid salt");
}

如何解决这个问题:

  1. 将盐轮增加到 10
  2. 尝试将最小密码长度设置为 4-5

我希望这有所帮助。

@Autowired
    DataSource dataSource;
    @Bean
    public PasswordEncoder passwordEncoder()
    {
        return new BCryptPasswordEncoder();
    }
    @Override
    protected void configure(AuthenticationManagerBuilder auth) throws Exception {
        auth.jdbcAuthentication().dataSource(dataSource).passwordEncoder(passwordEncoder());
    }

最新更新