Почему я не могу проверить электронную почту в Spring Boot & Spring Security?JAVA

Программисты JAVA общаются здесь
Гость
Почему я не могу проверить электронную почту в Spring Boot & Spring Security?

Сообщение Гость »

У меня есть два bean-компонента: CheckPassword и CheckEmail

Код: Выделить всё

@Service("CheckPassword")
@Primary
public class CheckPassword implements CheckStringInterface {

private static final String regex_password = "^(?=.*[A-Z])(?=.*[a-z])(?=.*\\d)(?=.*[@#$%^&+=!])(?=\\S+$).{8,20}$";

@Override
public boolean isStringValid(String rawPassword) {
Pattern pattern = Pattern.compile(regex_password);
Matcher matcher = pattern.matcher(rawPassword);
return matcher.matches();
}
}

Код: Выделить всё

@Service("CheckEmail")
public class CheckEmail implements CheckStringInterface {

private static final String regex_password = "^[A-Z0-9._%+-]+@[A-Z0-9.-]+\\\\.[A-Z]{2,6}$";

@Override
public boolean isStringValid(String rawPassword) {
Pattern pattern = Pattern.compile(regex_password);
Matcher matcher = pattern.matcher(rawPassword);
return matcher.matches();
}
}
Я использую @Qualifier для выбора нужного мне компонента, но почему только пароль возвращает true, а электронная почта всегда возвращает false?< /p>

Код: Выделить всё

@Qualifier("CheckPassword")
private final CheckStringInterface checkPasswordFormat;

@Qualifier("CheckEmail")
private final CheckStringInterface checkEmailFormat;

@Qualifier("EmailVerifyCode")
private final VerificationCodeManager verificationCodeManager;

@Value("${email_root}")
private String email_root;

private final SendMailTemplateService sendMailTemplateService;

private static final String template_verify_code_register = "templateVerifyCodeRegister";
private static String message_notification = "Use the code to verify this email: ";

@Transactional
public Integer register(RegisterDTO registerDTO, HttpServletRequest request){
if (userService.findByEmail(registerDTO.email()) == null) {
if (checkPasswordFormat.isStringValid(registerDTO.password()) == false
|| checkEmailFormat.isStringValid(registerDTO.email()) == false) {
log.info("Wrong Format {}", checkPasswordFormat.isStringValid(registerDTO.password()));
log.info("Wrong Format {}", checkEmailFormat.isStringValid(registerDTO.email()));
return 0; // Wrong format email or password
}

User user = new User();
user.setEmail(registerDTO.email());
user.setFullName(registerDTO.fullName());
user.setPassword(registerDTO.password());
user.setCreatedAt(Time.getTheTimeRightNow());
user.setUserVerifyCode(verificationCodeManager.generateCode());
user.setUserVerifyCodeExpirationTime(verificationCodeManager.codeExpiration());
log.info("------> RegisterService | register: register with email {}", user.getEmail());
createUser.create(user);
sendMail(user, user.getUserVerifyCode());

request.getSession().setAttribute("email", registerDTO.email());
return 1; // Create successful
} else {
return 2; // Email already exists
}
}
Это данные, которые я использую для тестирования API на Swagger:

Код: Выделить всё

{
"email": "bonbon147852369@gmail.com",
"fullName": "abcdABCD",
"password": "Password@1234"
}
Я пытался перейти на другое регулярное выражение, но это не помогло.
Когда я вхожу в систему, я вижу, что пароль всегда возвращает true, потому что я ввожу правильный формат, но электронная почта вернет false как в правильном, так и в неправильном формате.


Подробнее здесь: https://stackoverflow.com/questions/781 ... g-security

Вернуться в «JAVA»