Добавление пользовательской проверки в аутентификацию пользователя Jhipster - PullRequest
0 голосов
/ 20 июня 2019

Поскольку 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 (угловой) обрабатывает ошибку, показывая текст в самом модале. Something like this

Теперь, предположим, мне нужно добавить также пользовательскую проверку.Например, мне нужно проверить, является ли фамилия этого пользователя «Майк», а затем выдать пользовательскую ошибку, говорящую «Майк не может войти».

Проблема в authenticate () (org.springframework.security.authentication.AuthenticationManager) метод выбрасывает DisabledException, LockedException и BadCredentialsException по умолчанию.

Я не знаком с Spring Security, поэтому я не совсем понимаю, как мы можем переопределить классы и добавить необходимыефункциональность.

Более того, Angular перехватывает общее исключение, поэтому я предполагаю, что нам нужно добавить еще одно ограничение:

.catch(() => {
                this.authenticationError = true;
            });

Любая помощь будет принята с благодарностью.

Спасибозаранее.

...