728x90

문제점 : 아이디 찾기를 구현하는 도중 View의 form을 제축하면 시큐리티에 의해 login폼으로 이동하였다.

해결 : 컨트롤러에서 사용한 redirect의 경로를 잘못 지정하였던 것을 고쳤다.

프로젝트 구조

  • resources > templates > account > findIdForm이 존재
    // ID 찾기
    @GetMapping("findIdForm")
    public String findIdForm(@RequestParam(required = false) String email, Model model) {
        if(email != null) {
            List<Member> memberList = memberService.getMemberByEmail(email);
            model.addAttribute("memberList", memberList);
        }
        return "/account/findIdForm";
    }

    // ID 찾기
    @PostMapping("/findId")
    public String findId(String email, Model model){ // view의 form->input 의 name과 매핑됨.
        if(memberService.checkEmail(email)) {
            return "redirect:/findIdForm?email=" + email;
        } else {
            return "redirect:/account/findIdForm?error=true";
        }
    }

<고치기 전 코드 (PostMapping의 else 부분)>

    // ID 찾기
    @GetMapping("findIdForm")
    public String findIdForm(@RequestParam(required = false) String email, Model model) {
        if(email != null) {
            List<Member> memberList = memberService.getMemberByEmail(email);
            model.addAttribute("memberList", memberList);
        }
        return "/account/findIdForm";
    }

    // ID 찾기
    @PostMapping("/findId")
    public String findId(String email, Model model){ // view의 form->input 의 name과 매핑됨.
        if(memberService.checkEmail(email)) {
            return "redirect:/findIdForm?email=" + email;
        } else {
            return "redirect:/findIdForm?error=true";
        }
    }

<고친 후 코드 (PostMapping의 else 부분)>

  • 컨트롤러에서 PostMapping을 이용해 아이디 찾기 폼의 양식을 제출.
  • email을 제대로 입력하지 않은 경우 redirect:/findIdForm?error=true를 반환
  • email을 제대로 입력한 경우 redirect:/findIdForm?email= url로 입력한 email을 보내서 View의 타임리프 구문에서 활용

결론 : redirect할 때 경로를 컨트롤러 기준으로 작성하여 고쳤다. 즉, 매핑되는 주소를 적어준다.

+ Recent posts