我有一个SpringBoot 2.0.1,2.0.1.RELEASE应用程序,下面是我的配置文件
@Configuration
@EnableWebSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter {
@Autowired
private Environment env;
@Override
protected void configure(HttpSecurity http) throws Exception {
final List<String> activeProfiles = Arrays.asList(env.getActiveProfiles());
if (activeProfiles.contains("dev")) {
http.csrf().disable();
http.headers().frameOptions().disable();
}
http
.authorizeRequests()
.antMatchers(publicMatchers()).permitAll()
.and()
.formLogin().loginPage("/login").defaultSuccessUrl("/elcordelaciutat/config")
.failureUrl("/login?error").permitAll()
.and()
.logout().permitAll();
}
@Autowired
public void configureGlobal(AuthenticationManagerBuilder auth) throws Exception {
PasswordEncoder encoder = PasswordEncoderFactories.createDelegatingPasswordEncoder();
UserDetails userDetails = User.withUsername("elcor")
.password(encoder.encode("elcor"))
.roles("ADMIN")
.build();
auth.inMemoryAuthentication().withUser(userDetails);
}
private String[] publicMatchers() {
/** Public URLs. */
final String[] PUBLIC_MATCHERS = {
"/webjars/**",
"/css/**",
"/js/**",
"/images/**",
"/",
"/about/**",
"/contact/**",
"/error/**/*",
"/console/**"
};
return PUBLIC_MATCHERS;
}
}但是,当我登录到应用程序时,我在日志文件中得到了以下消息:
2018-04-11 11:27 [http-nio-5678-exec-7] WARN o.s.s.c.b.BCryptPasswordEncoder - Encoded password does not look like BCrypt我不能记录in...and密码是正确的。在将我的应用程序从SpringBoot 1更新到SpringBoot 2后,出现了此错误
发布于 2018-04-11 13:03:07
Security在版本5中引入了一些主要的更改,其中之一是在散列中包含用于散列密码的算法。这允许更容易的迁移。
密码的一般格式是:
{id}encodedPassword 附带注意:如果您将密码存储在数据库中并设置了一个固定长度,这也会导致您意外地截断哈希的末尾,因为在它前面的id会增加哈希长度。
我还将一个项目从Spring 1/ Spring 4迁移到Spring 2/ Spring 5,并从BCrypt迁移到了PBKDF2。
我的密码编码器现在看起来如下:
public PasswordEncoder passwordEncoder() {
// This is the ID we use for encoding.
String currentId = "pbkdf2.2018";
// List of all encoders we support. Old ones still need to be here for rolling updates
Map<String, PasswordEncoder> encoders = new HashMap<>();
encoders.put("bcrypt", new BCryptPasswordEncoder());
encoders.put(currentId, new Pbkdf2PasswordEncoder(PBKDF2_2018_SECRET, PBKDF2_2018_ITERATIONS, PBKDF2_2018_HASH_WIDTH));
return new DelegatingPasswordEncoder(currentId, encoders);
}它还需要用{bcrypt}更新数据库,并在所有当前散列前缀中添加前缀(我以前只使用BCrypt )。
来源:春季博客
https://stackoverflow.com/questions/49771558
复制相似问题