У меня настроена пружинная защита с JPA и JWT, и она отлично работает для паролей в виде простого текста,
Я пытался добавить Bcrypt, но не смог получить его на workd
- I попытался извлечь соль из сохраненного пароля и закодировать пароль в следующем запросе, сравнить их для проверки подлинности.
Но я не могу получить соль.
вот код
//SecurityConfig
@Override
protected void configure(AuthenticationManagerBuilder auth) throws Exception {
auth.userDetailsService(userDetailsService).passwordEncoder(new BCryptPasswordEncoder());
}
//Controller
@RequestMapping(value="/authenticate", method=RequestMethod.POST)
public ResponseEntity<?> createAuthenticationToken(@RequestBody AuthenticationRequest authenticationRequest) throws Exception {
try {
authenticationManager.authenticate(
new UsernamePasswordAuthenticationToken(authenticationRequest.getUsername(), authenticationRequest.getPassword())
);
} catch (BadCredentialsException e) {
throw new Exception("Incorrect username or password", e);
}
final UserDetails userDetails = userDetailsService.loadUserByUsername(authenticationRequest.getUsername());
final String jwt = jwtTokenUtil.generateToken(userDetails);
return ResponseEntity.ok(new AuthenticationResponse(jwt));
}
Я сохраняю пароль как
//UserService
public User saveUser(UserDto userDto) {
User user = new User();
user.setUsername(userDto.getUsername());
user.setPassword(passwordEncoder.encode(userDto.getPassword()));
user.setRoles(userDto.getRoles());
user.setActive(true);
userRepository.save(user);
return user;
}