그룹웨어 : RedirectAttributes

지환·2023년 12월 31일
0

그룹웨어

목록 보기
4/17

출처 | https://blog.naver.com/allkanet72/220964699929

redirect

  • redirect시 값을 전달하려면 GET방식으로 보내야한다. 요청 객체가 새로 생성되기 때문에, 값을 보내려면 URL과 같이 보내야한다.
// return 시
return "redirect:#";

// return 시 (데이터 포함, GET 방식)
return "redirect:#?id="+userId;

// sendRedirect 메소드 호출
response.sendRedirect("#"); 

// sendRedirect 메소드 호출 (데이터 포함, GET 방식)
response.sendRedirect("#?id="+userId);
  • 만약, 폼 형식의 문서를 작성하고 나서 서버로 보내면(POST방식) 다른 페이지로 리다이렉트한다. (이런 부분이 데이터 전송에는 적절하지 않다.)

  • 리다이렉트로 전송시 Model을 사용하지 않는다. 어차피 req,res가 있다고 가정하면 req,res 요청객체의 톰캣 내장객체가 끊어지고 새로운 url로 요청,응답객체가 생성되는데 어떻게 전달할 것인가?

    • Model은 forward 방식에서 주로 사용한다.
  • 그래서 리다이렉트시 Model을 사용하지 않고 RedirectAttributes를 사용한다.

  • 만약 Spitter객체를 보낸다고 가정하면,

    • 리다이렉트가 발생하면 원래 요청은 끊어지고, 새로운 HTTP GET 요청이 시작된다.

    • 그래서 리다이렉트 실행 이전에 수행된 모델 데이터는 소멸한다. (그래서 모델로 전달하는게 의미없음)

  • 리다이렉트 방법으로도 데이터를 전달하는 방법이 있다. GET의 특징을 사용하는 것이다.

리다이렉트는 HTTP GET 메소드 방식이라고 앞서 말했다. GET방식은 아래 그림처럼 header에 ? 뒤에 파라미터를 붙여서 전달한다. 때문에 URL에 노출되는 단점이 있다.

그래서 스프링은 RedirectAttributes 클래스를 제공한다.

  • 리다이렉트 자체가 POST/Redirect/GET 패턴

RedirectAttributes

  • 리다이렉트가 발생하기 전에 "모든 플래시 속성을" 세션에 복사한다.

  • 리다이렉션 이후에는 저장된 플래시 속성을 세션에서 모델로 이동시킨다.

  • 헤더에 파라미터를 붙이지 않기 때문에 URL에 노출되지 않는다.

RedirectAttributes가 제공하는 메소드 : addFlashAttribute()

addFlashAttribute() 는 리다이렉트 직전 플래시에 저장하는 메소드다. 리다이렉트 이후에는 소멸한다.

@RequestMapping(value = "/register", method = RequestMethod.POST)
    public String registPOST(BoardVO board, Model model) throws Exception{
        
        service.regist(board);
        model.addAttribute("result","success");
        
        return "redirect:/board/listAll";
    }

쿼리스트링으로 붙기는 하지만,, 보안에 너무 취약하다 ㅜㅜ

addFlashAttribute() 사용

   @RequestMapping(value = "/register", method = RequestMethod.POST)
    public String registPOST(BoardVO board, RedirectAttributes rttr) throws Exception{
        
        service.regist(board);
        
        rttr.addFlashAttribute("msg","success");
        return "redirect:/board/listAll";
    }

profile
아는만큼보인다.

0개의 댓글