Как проверить, существует ли электронная почта, кроме пользователя, который запрашивает? - PullRequest
0 голосов
/ 16 января 2020

Мне нужно проверить, уникальна ли электронная почта , но что не должна включать электронную почту пользователя, который запрашивает .

Для редактирования профиля, когда пользователь редактирует профиль без изменения своего адреса электронной почты (например, user@example.com), он выдает уникальное сообщение об ошибке, добавленное пользовательской проверкой @UniqueCheckEmail.

Класс модели:

public class UserProfileRequest {

    private String firstName;

    private String lastName;

    @NotBlank(message = "Email is required")
    @Email(message = "Email is invalid")
    @Column(unique = true)
    @UniqueCheckEmail     // Custom validation
    private String email;

Класс ограничений валидатора:

public class EmailConstraintValidator implements ConstraintValidator<UniqueCheckEmail, String> {

/* other code */

@Override
public boolean isValid(String email, ConstraintValidatorContext context) {          
    boolean status = true;      
    try {
        Optional<UserInfo> userInfo =  userInfoService.findByEmail(email);  
        logger.info(userInfo.toString());
        logger.info("User email present? " + userInfo.isPresent());         
        status = !userInfo.isPresent();
    } catch (NullPointerException e) {
        //logger.info("Email NullPointerException --> " + e.getMessage());
    } catch (Exception e) {
        //logger.info("Email unique check Exception --> " + e.getMessage());
    }       
    if (!status) {
        String messageTemplate = "Email already exists";            
        context.buildConstraintViolationWithTemplate(messageTemplate)
               .addConstraintViolation()
               .disableDefaultConstraintViolation();
    }
    return status;
}

}

Можно ли как-нибудь получить токен JWT и данные пользователя в этом методе isValid?

Любая помощь будет оценена. Заранее спасибо!

1 Ответ

1 голос
/ 16 января 2020

Вы можете автоматически подключить HttpServletRequest и получить доступ к заголовкам / cookie / сеансу запроса.

public class EmailConstraintValidator implements ConstraintValidator<UniqueCheckEmail, String> {

  @Autowired
  private HttpServletRequest request;

  // rest of code

}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...