Package com.easydesk.web.controller
Class ChangePasswordController
java.lang.Object
com.easydesk.web.controller.ChangePasswordController
로그인한 사용자 본인의 비밀번호 변경 화면.
보안상 중요한 점: 폼에 실려 오는
ChangePassword.username()은 신뢰하지 않는다. hidden
input을 조작해서 다른 사용자의 비밀번호를 바꾸려는 시도를 막기 위해, 실제 변경 대상은 항상 세션(LOGIN_USER)에
저장된 - 이미 로그인 절차를 통과한 - 사용자로 고정한다.
UserManager#changePassword(User, oldPassword, newPassword)가 내부적으로
oldPassword를 authenticate()로 검증한 뒤에만 forcePassword()로 새 비밀번호를 반영해주므로,
컨트롤러에서 별도로 현재 비밀번호를 재검증할 필요는 없다.
i18n: 화면에 보여줄 메시지는 문자열을 직접 만들지 않고 i18n/messages*.properties의
키를 MessageSource로 resolve해서 만든다. LocaleContextHolder.getLocale()는
(주의: com.easydesk.context.LocaleContextHolder 가 아니라 스프링이 제공하는 것) 이번 요청의
Locale을 돌려주는데, 아직 LocaleResolver를 따로 등록하지 않았으므로 기본값인
AcceptHeaderLocaleResolver가 브라우저의 Accept-Language 헤더를 그대로 사용한다.-
Constructor Summary
ConstructorsConstructorDescriptionChangePasswordController(SecurityService moduleSecurityService, org.springframework.context.MessageSource messageSource) -
Method Summary
Modifier and TypeMethodDescriptionform(HttpSession session, org.springframework.ui.Model model) submit(ChangePassword form, org.springframework.validation.BindingResult bindingResult, HttpSession session, org.springframework.ui.Model model)
-
Constructor Details
-
ChangePasswordController
public ChangePasswordController(@Qualifier("moduleSecurityService") SecurityService moduleSecurityService, org.springframework.context.MessageSource messageSource)
-
-
Method Details
-
form
@GetMapping("/change-password") public String form(HttpSession session, org.springframework.ui.Model model) -
submit
@PostMapping("/change-password") public String submit(@ModelAttribute("ChangePassword") ChangePassword form, org.springframework.validation.BindingResult bindingResult, HttpSession session, org.springframework.ui.Model model)
-