인프런 커뮤니티 질문&답변

문상준님의 프로필 이미지

작성한 질문수

스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술

RedirectAttributes

리다이렉트시...

해결된 질문

작성

·

220

-1

1. 강의 내용과 관련된 질문인가요? (예)
2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예)
3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예)

[질문 내용]

강의 내용 들으면서 예시 프로그램 만들어 봤습니다.
MemberDTO 에는 회원 가입시 비밀번호 확인 하는 부분이 없습니다. 이때, 비밀번호랑 비밀번호 확인란이랑 같은 것이 입력되었는지 확인하고 싶어서

이렇게 ModelAttribute로 member랑 mbrPwdConfirm을 넘겨 받아서 member의 pwd와 mbrPwdConfirm의 값이 같은지 비교했습니다. 그후 로그인 화면으로 리다이렉트 했는데, 이때,

이렇게 위에 mbrPwdConfirm부분이 쿼리로 나타납니다. singIn 함수에서 mbrPwdConfirm 부분을 제거 하고, request.getParameter("mbrPwdConfirm")을 하면 되긴합니다. 왜 전자의 방식은 안되고 후자의 방식은 되는 지 궁금합니다.
또한, 리다이렉트시

이 부분을 없애고 싶은데, 그러면 modelAttribute 부분을 없애야 하는데... 그러면 signIn함수에서 값을 사용을 못합니다....

 

답변 1

0

안녕하세요, 인프런 AI 인턴입니다.

문상준님의 질문은 리다이렉트 시 URL에 mbrPwdConfirm 값이 노출되는 문제와 이를 해결하기 위한 방법에 대한 것이군요.

리다이렉트 시 URL에 파라미터가 포함되어 노출되는 이유는 @ModelAttribute를 사용하여 POST 요청을 처리할 때, 바인딩된 객체나 값이 리다이렉트 URL의 쿼리 파라미터로 추가되기 때문입니다. 이는 Spring MVC의 기본 동작 중 하나로, 리다이렉트 시 모델에 담긴 데이터를 URL 파라미터에 추가하는 것을 의미합니다.

문제를 해결하기 위한 한 가지 방법은 RedirectAttributes를 사용하는 것입니다. RedirectAttributes를 메소드 파라미터로 추가하고, 리다이렉트 하고자 하는 URL로 리다이렉트하기 전에 필요한 속성만 명시적으로 추가하는 방식으로 처리할 수 있습니다. 이렇게 함으로써, 불필요한 데이터를 URL에 포함시키지 않고 리다이렉트할 수 있습니다.

@PostMapping("/signin")
public String signIn(@ModelAttribute("member") MemberDTO member,
                     BindingResult bindingResult,
                     RedirectAttributes redirectAttributes,
                     HttpServletRequest request) {
    // 비밀번호 확인 로직 처리
    // ...

    // 필요한 속성만 리다이렉트 시 포함
    redirectAttributes.addAttribute("redirectURL", "/member/login");
    return "redirect:/path";
}

RedirectAttributes를 사용하면 URL에 노출되지 않게 리다이렉트할 수 있으며, mbrPwdConfirm 같은 확인용 비밀번호 또는 다른 민감 정보를 URL에서 숨길 수 있습니다. 이렇게 개선하면 URL에 불필요한 정보가 노출되는 문제를 방지할 수 있습니다.

더 자세한 정보는 Spring 공식 문서에서 RedirectAttributes에 대해 확인하실 수 있습니다.