Я следовал этому руководству Безопасность при загрузке + JWT , чтобы узнать, как защитить приложение с помощью безопасности при загрузке и jwt, и я вызываю / authenticate api для проверки функциональности входа в систему.
@PostMapping(value = "/authenticate")
public ResponseEntity<?> createAuthenticationToken(@RequestBody User authenticationRequest) throws Exception {
authenticate(authenticationRequest.getUsername(), authenticationRequest.getPassword());
final UserDetails userDetails = userDetailsService
.loadUserByUsername(authenticationRequest.getUsername());
final String token = jwtTokenUtil.generateToken(userDetails);
return ResponseEntity.ok(new JwtResponse(token));
}
private void authenticate(String username, String password) throws Exception {
try {
authenticationManager.authenticate(new UsernamePasswordAuthenticationToken(username, password));
} catch (DisabledException e) {
throw new Exception("USER_DISABLED", e);
} catch (BadCredentialsException e) {
throw new Exception("INVALID_CREDENTIALS", e);
}
}
Я использую почтальон для вызова API, передавая имя пользователя и пароль в json:
{
"username":"user",
"password":"pass"}
AuthenticationManager.authenticate выбрасывает Пользователь заблокирован
Мой Реализация UserDetails непосредственно на User Entity, не лучшая практика, но у меня не было лучшей идеи о том, как это сделать сейчас, может быть, я должен иметь какой-то DTO, который реализует, и иметь его в качестве аргумента для createAuthenticationToken ()
Это переопределенные методы, поступающие из UserDetails:
@Override
public boolean isAccountNonExpired() {
return false;
}
@Override
public boolean isAccountNonLocked() {
return false;
}
@Override
public boolean isCredentialsNonExpired() {
return false;
}
Любая помощь приветствуется.