code: private void blockByUserFailedLoginAttempts(final String email, final LoginBlockResultImpl loginBlockResultImpl) {
  		final UserAccount userExist = userDAO.findFirstByProperty(UserAccount_.email, email);
  
  		if (userExist != null) {
  
  			final ApplicationConfiguration maxLoginAttemptsByUser = applicationConfigurationService.checkValueOrLoadDefault(MAX_FAILED_LOGIN_ATTEMPTS_RECENT_HOUR_PER_USER, BLOCKS_ANY_LOGIN_ATTEMPTS_AFTER_THIS_NUMBER_IS_REACHED, ConfigurationGroup.AUTHENTICATION, LoginBlockedAccessImpl.class.getSimpleName(), LOGIN_BLOCKER, BLOCKS_LOGIN_ATTEMPTS, APPLICATION_AUTHENTICATION_ALLOW_MAX_RECENT_FAILED_LOGINS_BY_USER, DEFAULT_MAX_LOGIN_ATTEMPTS);
  
  			final List<ApplicationActionEvent> failedLoginsByThisUser = applicationActionEventDAO.findListByProperty(
  					new Object[] { email, ApplicationOperationType.AUTHENTICATION, ServiceResult.FAILURE.toString() },
  					ApplicationActionEvent_.elementId, ApplicationActionEvent_.applicationOperation,
  					ApplicationActionEvent_.applicationMessage);
  
  			final Date oneHourAgo = new Date(System.currentTimeMillis() - ONE_HOUR);
  			final Map<Boolean, List<ApplicationActionEvent>> recentOldLoginAttemptsMap = failedLoginsByThisUser.stream()
  					.collect(Collectors.groupingBy((final ApplicationActionEvent x ) -> x.getCreatedDate().after(oneHourAgo)));
  			final List<ApplicationActionEvent> recentFailedLogins = recentOldLoginAttemptsMap.get(Boolean.TRUE);
  			if (recentFailedLogins != null && recentFailedLogins.size() > NumberUtils.toInt(maxLoginAttemptsByUser.getPropertyValue(),DEFAULT_MAX_LOGINS)) {
  				loginBlockResultImpl.setBlocked(true);
  				loginBlockResultImpl.addMessages(BLOCKED_BY_MORE_THAN_5_RECENT_LOGIN_ATTEMPTS_BY_THIS_USER);
  			}
  		}
  	}
docs: Block by user failed login attempts.
  
  @param email
  the email
  @param loginBlockResultImpl
  the login block result impl