본문 바로가기
토이 프로젝트/게시판 만들기 에러

[토이프로젝트/게시판] RedirectAttributes로 데이터 전달하기

by dev_m.w 2024. 6. 11.

게시판 수정/삭제 form 에서 작성한 값을 post 방식으로 처리하고 Redirect하여 Get 방식으로 게시판 목록을 가져오는데, 그전에 보고있던 페이지 값이나 파라미터로 값을 넘겨야 할경우 model에 값을 넘기니 그값이 유지가 되지않았다

redirect의 경우, 지정된 주소로 새로운 HTTP GET 요청이 시작되기 때문에 실행 이전에 수행된 모델 데이터가 소멸합니다. 따라서 redirect를 할 때는 Request 객체나 Model 객체에 데이터를 담아도 전달되지 않습니다.

다만 기본적으로 리다이렉트시 Model 객체의 속성은 URL 주소의 쿼리 스트링으로 추가되어 전달됩니다.

 

 

 

 

 

 

model로 값을 넘겼을떄 url에 파라미터로 값이 들어온다.객체에 값은 null.

 

 

그럼 이 초기에 주었던 페이지값을 유지 하기위해서  어떻해야하나?🤔🤔

스프링에서 RedirectAttributes 인터페이스를 제공한다.

 

RedirectAttributes.addAttribute()

  •  addAttribute()는 브라우저의 주소창에 보이게 URL에 추가하여 정보를 넘긴다.
  •  리다이렉트 할떄 쿼리 스트링이 되는 값을 지정
  •  URL에 쿼리 스트링으로 추가된다. -> 보안에 취약

URL뒤에 쿼리 스트링으로 페이지 값이 넘어온걸 확인할수있다.

 

 

 

 

RedirectAttributes.addFlashAttribute()

  • 임시로 저장하는 방식(일회성!)
  • 세션에 저장되어 사용된 뒤에 자동으로 삭제
  • 검증 결과, 성공 실패 여부 메세지와 같이 임시로 사용되는 데이터를 다루는데 적합
  • URL에 노출이 되지 않는다.

 

RedirectAttributes 처리과정

 

RedirectAttributes의 Flash attributes는 위의 그림처럼 리다이렉트가 발생하기 전에 모든 플래시 속성을 세션에 복사한다. 리다이렉션 이후에는 저장된 플래시 속성을 세션에서 모델로 이동시킨다.

 

 

 

코드로 적용시켜보기

@PostMapping("/modify")
public String modify(BoardDto boardDto, Model m , HttpSession session, RedirectAttributes rattr,Integer page, Integer pageSize){
    String writer = (String)session.getAttribute("id");
    boardDto.setWriter(writer);

    try {

        int rowCnt = boardService.modify(boardDto);

        if(rowCnt!=1)
            throw new Exception("Modify failed");

        rattr.addFlashAttribute("msg","MOD_OK");
        rattr.addAttribute("page",page);
        rattr.addAttribute("pageSize",pageSize);
        
        return "redirect:/board/list";
       
    } catch (Exception e) {
        e.printStackTrace();
        m.addAttribute(boardDto);
        m.addAttribute("msg","MOD_ERR");
        return "board";
    }
}

 

 

 

 

참고:

https://blog.naver.com/allkanet72/220964699929

 

[스프링] RedirectAttributes

RedirectAttributes 폼 형식의 문서를 작성 후, 서버로 보내면(POST 방식) 곧이어 다른 페이지로 리...

blog.naver.com

 

https://amy-it.tistory.com/111