AuthenticationProvider с паролем Encoder - PullRequest
0 голосов
/ 24 декабря 2018

Когда я пытаюсь использовать пароль для проверки.Это не сработало, я вижу "неверный пароль".Как я должен получить authentication.getCredentials (), чтобы проверить пароли?

Если я сохраню пользователя без кодировки и попытаюсь войти, это работает.

@Component
public class AuthClient implements AuthenticationProvider {

    @Autowired
    private ClientRepository clientRepository;

    @Autowired
    PasswordEncoder passwordEncoder;


    @Override
    public Authentication authenticate(Authentication authentication) throws AuthenticationException {


        String username = authentication.getName();
        String checkPassword = passwordEncoder.encode(authentication.getCredentials().toString());

        Client client = this.clientRepository.findByUsername(username);

        if (client == null) {
            throw new UsernameNotFoundException("Invalid username/password");
        }

        String password = client.getPassword();
        if (!password.equals(checkPassword)) {
            throw new BadCredentialsException("Bad password");
        }

        Collection<? extends GrantedAuthority> authorities = translate();

        return new UsernamePasswordAuthenticationToken(username,password,authorities);

    }

    private Collection<? extends GrantedAuthority> translate() {
        List<GrantedAuthority> authorities = new ArrayList<>();
        authorities.add(new SimpleGrantedAuthority("ROLE_CLIENT"));
        return authorities;
    }


    @Override
    public boolean supports(Class<?> authentication) {
        return (UsernamePasswordAuthenticationToken.class
                .isAssignableFrom(authentication));
    }
}

1 Ответ

0 голосов
/ 24 декабря 2018

вы делаете это неправильно, если вы хотите проверить два пароля, вам нужно использовать passwordEncoder, как это:

    String presentedPassword = authentication.getCredentials().toString();

    if (!passwordEncoder.matches(presentedPassword, client.getPassword())) {
      throw new BadCredentialsException("Bad password");
    }
...