Я разрабатываю приложение с угловым 6 в качестве переднего конца и пружинной загрузки в качестве заднего конца. В настоящее время я работаю с забытым паролем:
- Получение идентификатора электронной почты из angular и отправка электронного письма на идентификатор.
@RequestMapping(value = "/forgotPassword", method = RequestMethod.POST)
public ResponseEntity<?> forgotPassword(@RequestParam("email") String recepientemail, HttpServletRequest request) {
Optional<User> userlist = userRepository.findByEmail(recepientemail);
SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
if (userlist.isPresent()) {
User u = userlist.get();
u.setResetToken(UUID.randomUUID().toString());
u.setResetTokenExpiry(simpleDateFormat.format(DateUtils.addDays(new Date(), 1)));
u.setModifiedBy(u.getId());
u.setModifiedDate(simpleDateFormat.format(new Date()));
userRepository.save(u);
String appUrl = request.getScheme() + "://" + request.getServerName() + ":" + request.getLocalPort();
// Email message
email.sendSimpleEmail(u.getEmail(), "DIS Password Reset Request",
"To reset your password, click the link below:\n" + appUrl + "/dis/resetPassword?resetToken="
+ u.getResetToken());
return new ResponseEntity<>(
new ResponseMessage("A password reset link has been sent to registered email address!"),
HttpStatus.OK);
}
return new ResponseEntity<>(new ResponseMessage("We didn't find an account for this e-mail address!"),
HttpStatus.BAD_REQUEST);
}
- При нажатии на ссылку весенняя загрузка перенаправит на страницу сброса пароля углового.
@RequestMapping(value = "/resetPassword", method = RequestMethod.GET)
public ModelAndView displayResetPasswordPage(@RequestParam("resetToken") String token) throws ParseException {
SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
Optional<User> user = userRepository.findUserByResetToken(token);
ModelAndView modelAndView = new ModelAndView();
if (user.isPresent()) { // Token found in DB
if (simpleDateFormat.parse(user.get().getResetTokenExpiry()).after(new Date())) {
modelAndView.addObject("resetToken", token);
modelAndView.setViewName("redirect:http://localhost:4200/reset-password");
} else {
modelAndView.addObject("errorMessage", "Oops! Your password reset link has expired.");
modelAndView.setViewName("redirect:http://localhost:4200/forgot-password");
}
} else { // Token not found in DB
modelAndView.addObject("errorMessage", "Oops! This is an invalid password reset link.");
modelAndView.setViewName("redirect:http://localhost:4200/forgot-password");
}
return modelAndView;
}
- При вводе нового пароля на странице сброса angular передаст маркер сброса и новый пароль для весенней загрузки, а затем весенняя загрузка должна перенаправить на страницу входа после успешной смены пароля.
@RequestMapping(value = "/processResetPassword", method = RequestMethod.POST)
public ModelAndView setNewPassword(@RequestBody Map<String, String> requestParams, RedirectAttributes redir, HttpServletResponse response) {
SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
Optional<User> user = userRepository.findUserByResetToken(requestParams.get("resetToken"));
ModelAndView modelAndView = new ModelAndView();
if (user.isPresent()) {
User resetUser = user.get();
resetUser.setPassword(encoder.encode(requestParams.get("password")));
resetUser.setResetToken(null);
resetUser.setResetTokenExpiry(null);
resetUser.setModifiedBy(resetUser.getId());
resetUser.setModifiedDate(simpleDateFormat.format(new Date()));
userRepository.save(resetUser);
//redir.addFlashAttribute("successMessage", "You have successfully reset your password. You may now login.");
//modelAndView.addObject("successMessage", "You have successfully reset your password. You may now login.");
modelAndView.setViewName("redirect:http://localhost:4200");
return modelAndView;
} else {
modelAndView.addObject("errorMessage", "Oops! This is an invalid password reset link.");
modelAndView.setViewName("redirect:http://localhost:4200/forgot-password");
}
return modelAndView;
}
Теперь проблема в том, что во второй точке весенняя загрузка может идеально перенаправить страницу пароля для сброса, но в третьей точке при перенаправлении на страницу входа в систему выдается ошибка CORS. Почему?
Вот скриншот ошибки
Edit:
Вот перекрестная аннотация
@CrossOrigin(origins = "*", maxAge = 3600)
@RestController
@RequestMapping("/dis")
public class AuthRestAPIs {....}
и вот заголовок запроса в сети