저는 스프링을 사용하는 간단한 웹 응용 프로그램을 구현 중이며 암호 메커니즘을 재설정하려고 시도하고 있습니다. 나는 이것을 이렇게하기로 결정했다 : 사용자는 site/reset_password?t=token
과 같은 그의 전자 메일 수신함에 대한 링크를 얻는다. 그리고 나서 그는 (GET을 사용하여) 그가 새로운 암호를 쓰는 양식을 본다. 슬프게도 나는 사용자가 자신의 새 암호 (POST 포함)를 제출할 때 몇 가지 문제를 발견했다. POST 메서드에서 그의 링크에서이 토큰이 필요합니다. GET에서 POST로 인수 전달
@RequestMapping(value = "/reset_password", method = RequestMethod.GET)
public String resetPassowrd(@RequestParam("t") String token, Model model) {
try {
ResetPasswordForm form = new ResetPasswordForm();
form.setResetPasswordToken(token);
model.addAttribute("resetPasswordForm", form);
model.addAttribute("tokenStatus",TokenStatus.OK);
} catch (WrongTokenException ex) {
model.addAttribute("tokenStatus",TokenStatus.WRONG);
}
return "token/reset_password.html";
}
난 형태 오브젝트 (동일한 객체는 사용자가 자신의 암호를 함께 기입)에 전달하도록했지만, POST 방법이 필드는 널 (null)로 설정된다.
@RequestMapping(value = "/reset_password", method = RequestMethod.POST)
public String resetPassowrd(@ModelAttribute @Validated ResetPasswordForm resetPasswordForm, BindingResult bindingResult, Model model) {
if (bindingResult.hasErrors()) {
return "token/reset_password.html";
}
userCompanyService.changePassword(resetPasswordForm);
return "token/reset_password_success.html";
}
토큰을 사용하여 해당 필드를 찾은 후 슬프게도이 POST로 GET의 요청에 따라 전달되지 않습니다, 나는이 방법 @RequestParam(value = "t",required = false) String token
또 다른 PARAM를 추가하는 시도 null입니다. 어떻게 작동시켜야합니까? 나는 스프링과 함께 Thymeleaf를 사용한다는 사실을 언급 할만한 가치가 있다고 생각합니다.
그렇기 때문에 reset_password.html 페이지에서 사용하는 모델에 토큰을 전달합니다. 이 HTML 페이지는 토큰과 어떤 관련이 있습니까? 양식의 숨겨진 입력 필드로 추가하지 않는 한이 페이지에 포함 된 양식과 함께 마술처럼 제출하지 않습니다. –
ResetPasswordForm에는 token, password, repeatedpassword의 세 가지 필드가 있습니다. '토큰/reset_password.html'에서 나는 사용자 암호 및 repeatedpassword에서 얻은 양식을 가지고 있으며 resetPasswordForm을 제출합니다. 그래서 토큰은 객체에 남아있을 것이고 그에게 아무 것도하지 않을 것이라고 생각합니다 (나는 그것을 수정하지 않습니다) . – ogarogar
스프링과 웹 전반적인 작동 방식을 완전히 오해하고 있습니다. 요청을 보내면 매개 변수를 포함해야합니다. Spring은 이러한 매개 변수를 보유 할 객체를 만든 다음이 객체를 기반으로 HTML을 생성합니다. 그리고 끝났습니다. 요청이 처리되면 개체가 사라집니다. 다음 요청은 이전 요청과 독립적입니다. 한 요청에서 다른 요청으로 Spring이 기억하도록하기 위해서는 세션에 그 내용을 저장해야합니다. 그러나 당신은 정말로 그것을 일반적으로하고 싶지 않습니다. 그리고 확실히 여기 있습니다. 토큰과 함께 숨겨진 필드를 사용하고 양식과 함께 제출하십시오. –