Spring Boot JWT-添加BCrypt安全性-访问被拒绝



我有一个应用程序服务器,它使用带有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个字符。

最新更新