Поскольку Jhipster (Angular + Springboot Scaffolding) использует JWT для аутентификации, у нас есть пользовательская модель входа, которая проверяет аутентификацию пользователя.Теперь код выглядит примерно так (UserJWTController.java):
@PostMapping("/authenticate")
@Timed
public ResponseEntity<JWTToken> authorize(@Valid @RequestBody LoginVM loginVM) {
UsernamePasswordAuthenticationToken authenticationToken =
new UsernamePasswordAuthenticationToken(loginVM.getUsername(), loginVM.getPassword());
Authentication authentication = this.authenticationManager.authenticate(authenticationToken);
SecurityContextHolder.getContext().setAuthentication(authentication);
boolean rememberMe = (loginVM.isRememberMe() == null) ? false : loginVM.isRememberMe();
String jwt = tokenProvider.createToken(authentication, rememberMe);
HttpHeaders httpHeaders = new HttpHeaders();
httpHeaders.add(JWTConfigurer.AUTHORIZATION_HEADER, "Bearer " + jwt);
return new ResponseEntity<>(new JWTToken(jwt), httpHeaders, HttpStatus.OK);
}
Замечено, что, когда пользователь вводит неверные учетные данные, выдается ошибка.А front-end (угловой) обрабатывает ошибку, показывая текст в самом модале.
Теперь, предположим, мне нужно добавить также пользовательскую проверку.Например, мне нужно проверить, является ли фамилия этого пользователя «Майк», а затем выдать пользовательскую ошибку, говорящую «Майк не может войти».
Проблема в authenticate () (org.springframework.security.authentication.AuthenticationManager) метод выбрасывает DisabledException, LockedException и BadCredentialsException по умолчанию.
Я не знаком с Spring Security, поэтому я не совсем понимаю, как мы можем переопределить классы и добавить необходимыефункциональность.
Более того, Angular перехватывает общее исключение, поэтому я предполагаю, что нам нужно добавить еще одно ограничение:
.catch(() => {
this.authenticationError = true;
});
Любая помощь будет принята с благодарностью.
Спасибозаранее.