我有一个应用程序服务器,它使用带有JWT令牌的Spring引导框架。我想加密用户密码,但遇到登录问题。我可以使用加密用户的密码userModel.setPassword(new BCryptPasswordEncoder().encode(userModel.getPassword()));
但当尝试登录时,我得到了CCD_ 2。我试图更改我的身份验证方法并从登录时加密密码,但没有成功。
new UsernamePasswordAuthenticationToken(
authenticationRequest.getUsername(),
new BCryptPasswordEncoder().encode( authenticationRequest.getPassword())));
如果你能给我指明直接的方向或给我解决方案,我将感谢你的帮助。下面是我的安全配置文件。
@Configuration
@EnableWebSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter {
private final MyUserDetailService myUserDetailService;
private final JwtRequestFilter jwtRequestFilter;
public SecurityConfig(MyUserDetailService myUserDetailService, JwtRequestFilter jwtRequestFilter) {
this.myUserDetailService = myUserDetailService;
this.jwtRequestFilter = jwtRequestFilter;
}
@Override
// Authentication : User --> Roles
protected void configure(AuthenticationManagerBuilder auth)
throws Exception {
auth.authenticationProvider(authProvider());
}
@Bean
public PasswordEncoder passwordEncoder() {
return new BCryptPasswordEncoder();
}
@Bean
public DaoAuthenticationProvider authProvider() {
DaoAuthenticationProvider authProvider = new DaoAuthenticationProvider();
authProvider.setUserDetailsService(myUserDetailService);
authProvider.setPasswordEncoder(passwordEncoder());
return authProvider;
}
@Override
// Authorization : Role -> Access
protected void configure(HttpSecurity http) throws Exception {
http
.csrf().disable()
.formLogin().disable()
.headers().frameOptions().disable()
.and()
.authorizeRequests()
.antMatchers("/authenticate").permitAll() .and()
.sessionManagement()
.sessionCreationPolicy(SessionCreationPolicy.STATELESS);
http.addFilterBefore(jwtRequestFilter, UsernamePasswordAuthenticationFilter.class);
}
@Override
@Bean
public AuthenticationManager authenticationManagerBean() throws Exception {
return super.authenticationManagerBean();
}
@Bean
CorsConfigurationSource corsConfigurationSource() {
final UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource();
source.registerCorsConfiguration("/**", new CorsConfiguration().applyPermitDefaultValues());
return source;
}
}
我无法使用加密密码或原始密码进行身份验证(登录(。请让我知道我能做些什么来修复。
谢谢你的帮助。
嘿,我和你一样有同样的问题,我只是刚刚解决它。
new UsernamePasswordAuthenticationToken(
authenticationRequest.getUsername(),
authenticationRequest.getPassword())
);
用我的代码替换你的那部分代码。通过再次调用new BCryptPasswordEncoder().encode
,您可以创建另一个salt值,该值与之前在数据库中保存用户时创建的值不同。通过登录,您将永远不会获得与数据库中的值相同的值。
如果数据库中存储的密码未正确加密,则引发异常。
请确保它以$2a$
、$2b$
或$2y$
开头,并且长度正好为60个字符。