Учетная запись пользователя блокируется при входе в Spring Securty - PullRequest
0 голосов
/ 17 января 2020

Я следовал этому руководству Безопасность при загрузке + 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;
}

Любая помощь приветствуется.

1 Ответ

3 голосов
/ 17 января 2020

isAccountNonLocked

boolean isAccountNonLocked()
Indicates whether the user is locked or unlocked. A locked user cannot be authenticated.
Returns:
true if the user is not locked, false otherwise

false означает, что пользователь заблокирован. Вы должны вернуть true из метода, чтобы пользователь был не заблокирован.

...