Обработчики обратного вызова предназначены для предоставления пароля открытого текста или проверки пароля дайджеста, если известен пароль открытого текста.
Но если вы не знаете открытый текст, т. Е. Его одностороннее хеширование, то интерфейс обратного вызоване подходит, и вы должны создать класс, который реализует интерфейс Validator .
Вот мой пример реализации этого интерфейса, который использует репозиторий JPA, в котором пароль уже хранится как хеш BCrypt,
Использование с документально подтвержденным свойством ws-security.ut.validator
здесь
, т. Е. Как свойство CXF <entry key="ws-security.ut.validator" value-ref="com.package.CustomUsernameTokenValidator" />
public class CustomUsernameTokenValidator implements Validator {
@Autowired
ProfileRepository profileRepository;
@Override
public Credential validate(Credential credential, RequestData requestData) throws WSSecurityException {
Profile profile = profileRepository.findByName(credential.getUsernametoken().getName());
if (profile != null) {
if (BCrypt.checkpw(credential.getUsernametoken().getPassword(), profile.getPassword())) {
return credential;
}
}
throw new WSSecurityException(WSSecurityException.ErrorCode.FAILED_AUTHENTICATION);
}
}