Я новичок в Spring Boot.
Я хотел бы знать, как я могу проверить DTO Credentials перед аутентификацией в Spring Boot?
У меня есть этот контроллер:
@PostMapping
public ResponseEntity<TokenDTO> generateTokenJwt(@Valid @RequestBody CredentialsDTO credentials, BindingResult result)
throws AuthenticationException {
TokenDTO response = new TokenDTO();
UsernamePasswordAuthenticationToken authenticationToken = new UsernamePasswordAuthenticationToken(
credentials.username, credentials.password);
Authentication authentication = authenticationManager.authenticate(authenticationToken);
SecurityContextHolder.getContext().setAuthentication(authentication);
UserDetails userDetails = userDetailsService.loadUserByUsername(credentials.username);
String token = jwtTokenUtils.getToken(userDetails);
response.token = token;
return ResponseEntity.ok(response);
}
Учетные данные DTO:
public class CredentialsDTO {
@NotEmpty
public String username;
@NotEmpty
public String password;
}
Итак, когда я выполняю POST так:
curl -i -X POST \
-H "Accept:application/json" \
-H "Content-Type:application/json" \
-d \
'{
"username": "",
"password": "123456"
}' \
'http://localhost:8080/api/login'
Я хотел бы показать ошибку 422, говорящую о том, что имя пользователя не должно быть пустым, но происходит то, что сначала выполняется аутентификация, и возвращается ошибка 401.