Class ChangePasswordController

java.lang.Object
com.easydesk.web.controller.ChangePasswordController

@Screen("ChangePassword") @Controller public class ChangePasswordController extends Object
로그인한 사용자 본인의 비밀번호 변경 화면. 보안상 중요한 점: 폼에 실려 오는 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 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)