Я могу получить свой пользовательский dao в реализации DaoAuthenticationProvider, но я не могу обновить тот же объект. Я хочу увеличить число неудачных попыток доступа при неудачных входах в систему, но в результате Spring выдает исключение.
Я попытался автоматически подключить менеджер сущностей и создать транзакцию независимо, сохранив объект пользователя, но безрезультатно.
Вот соответствующий вызов метода сервиса:
public void resetPassowrdAttempts(CorAclUser user) {
user.setAccessfailedcount(BigDecimal.valueOf(1));
userRepository.save(user); //Exception here
}
Вот переопределенный метод в провайдере аутентификации DAO. Я не переопределил другие методы.
protected void additionalAuthenticationChecks(UserDetails userDetails,UsernamePasswordAuthenticationToken authentication){
CorAclUser aclUser = aclUserRepository.findById_UsernameAndId_UserTenantCode(userDetails.getUsername(),Constants.TENANT_CODE).orElseThrow(
() -> new UsernameNotFoundException("Invalid username or password."));
if(!aclUser.getActiveFlag())
throw new NotFoundException(ExceptionResponseCodes.USER_NOT_FOUND, "User is deactivated");
if(userDetails.getAuthorities()!=null) {
if(verifyHash(authentication.getCredentials().toString(),aclUser.getPasswordhash()) ) {
userService.resetPassowrdAttempts(aclUser);
}else {
throw new BadCredentialsException("Password is incorrect!");
}
}else {
throw new BadCredentialsException("user does not have any privileges");
}
}
Вот журнал ошибок:
[ate.internal.ExceptionMapperStandardImpl]: HHH000346: ошибка во время управляемого сброса [org.springframework.security.core.userdetails.User не может быть приведен к com.tlx.configurations.security.CustomUserDetails]
Ошибка обработки: TransactionSystemException, не удалось зафиксировать транзакцию JPA; Вложенное исключение - javax.persistence.RollbackException: ошибка при фиксации транзакции
Решено [org.springframework.transaction.TransactionSystemException: Не удалось зафиксировать транзакцию JPA; вложенное исключение: javax.persistence.RollbackException: ошибка при фиксации транзакции]