来自 Spring Framework Doc
@Deprecated public static User.UserBuilder withDefaultPasswordEncoder()
已过时。使用这种方法对生产来说不安全, 但是可以接受演示和入门。用于生产 目的,确保密码在外部编码。看方法 Javadoc了解更多细节。 警告:此方法被认为对生产不安全,仅适用于此类方法 用于样品应用。
已过时。使用这种方法对生产来说不安全, 但是可以接受演示和入门。用于生产 目的,确保密码在外部编码。看方法 Javadoc了解更多细节。
警告:此方法被认为对生产不安全,仅适用于此类方法 用于样品应用。
UserDetails user = User.withDefaultPasswordEncoder() .username("user") .password("password") .roles("USER") .build(); // outputs {bcrypt}$2a$10$dXJ3SW6G7P50lGmMkkmwe.20cQQubK3.HZWzG3YB1tlRy.fqvM/BG System.out.println(user.getPassword());
这对于生产来说是不安全的(它是用于入门的 经验)因为密码“密码”被编译成了 源代码然后在创建时包含在内存中。 这意味着仍有办法恢复纯文本密码 使它不安全。它确实提供了使用普通的轻微改进 文本密码,因为UserDetails密码是安全散列的。这个 表示如果UserDetails密码被意外暴露,则表示 密码已安全存储。在生产环境中,它是 建议提前哈希密码。例如:
PasswordEncoder encoder = PasswordEncoderFactories.createDelegatingPasswordEncoder(); // outputs {bcrypt}$2a$10$dXJ3SW6G7P50lGmMkkmwe.20cQQubK3.HZWzG3YB1tlRy.fqvM/BG // remember the password that is printed out and use in the next step System.out.println(encoder.encode("password")); UserDetails user = User.withUsername("user") .password("{bcrypt}$2a$10$dXJ3SW6G7P50lGmMkkmwe.20cQQubK3.HZWzG3YB1tlRy.fqvM/BG") .roles("USER") .build();
返回: UserBuilder,使用默认的PasswordEncoder自动编码密码
要回答您的问题,您可以:
public void configureGlobal(AuthenticationManagerBuilder auth) throws Exception { PasswordEncoder encoder = PasswordEncoderFactories.createDelegatingPasswordEncoder(); UserDetails userDetails = User.withUsername(DEV_USER) .password(encoder.encode(DEV_PWD)) .roles("ADMIN") .build(); auth.inMemoryAuthentication().withUser(userDetails); }