-
[Spring] RedirectAttributes 과 Model 알아보기Back-End/Spring Legacy 2022. 8. 29. 12:23
서론
form 형식의 문서를 작성한 후, 서버로 보내면 (POST 방식) 곧 이어 다른 페이지로 리다이렉트한다.
redirect 방식은 Get 방식이라 데이터 전송에는 적절하지 않다, 리다이렉트가 발생하면 원래 요청은 끊어지고, 새로은 HTTP GET요청이 시작된다. 때문에 리타이렉트 실행 이전 수행된 모델 데이터는 소멸한다. 따라서 리다이렉트로 모델을 전달하는 것은 의미가 없다.
RedirectAttributes
그러나, redirect로 데이터를 전달하는 방법이 있는데, GET의 특징을 사용하는 것이다. GET 방식은 header에 ? 뒤에 파라미터를 붙여서 전달한다. 때문에 url 노출되는 단점이 있다.
그래서 스프링은 RedirectAttributes 클래스를 제공한다. RedirectAttributes 는 아래 그림처럼 리다이렉트가 발생하기 전에 모든 플래시 속성을 세션에 복사한다. 리다이렉션 이후에는 저장된 플래시 속성을 세션에서 모델로 이동시킨다. 헤더에 파라미터를 붙이지 않기 때문에 url에 노출되지 않는 다.
Model과 RedirectAttributes 비교
1. Model의 .addAttrivute로 parameter 넘겨 redirect
- parameter를 보내는 쪽에서 .addAttribute로 값을 setting 해서 다른 method로 parameter를 전달해준다.
- 파라미터를 받는쪽에서는 파라미터를 받을 때 어노테이션을 명시해준다.
- 받은 파라미터를 .addAttribute로 값을 세팅해주면 최종적으로 view에 전달된다.
- 전달 된 parameter는 GET 방식으로 URL에 나타난다.
보통 Model의 addAttribute로 값을 전달할 때는 view에서 보여주기 위한 방식이고, 게시글 조회 같은 중요 정보를 넘기지 않을 때 사용한다.
2. RedirectAttributes의 addFlashAttribute로 parameter 넘겨 redirect
- paramter를 보내는 족에서는 .addFlashAttribute로 값을 setting해서 다른 method로 parameter를 전달해준다.
- 파라미터를 받는 쪽에선 별다른 mapping이나 .addAttribute setting 없이 바로 사용할 수 있다.
(세션을 이용하기 때문, 일회성으로 사용해서 redirect되면 사라진다)
- 이렇게 전달된 parameter는 url에 노출되지 않는다.
참고 : https://m.blog.naver.com/PostView.naver?isHttpsRedirect=true&blogId=allkanet72&logNo=220964699929
반응형'Back-End > Spring Legacy' 카테고리의 다른 글
[3-ch15 Spring ] MyBatis의 동적 태그 ( if, choose, trim)와 LIKE 사용 방법 (0) 2022.08.29 [3-ch14 Spring 게시판] view, 페이징의 화면 처리 (0) 2022.08.29 [3-ch13 게시판] MyBatis와 스프링에서 페이징 처리하기 (0) 2022.08.28 [3-ch12 Spring web 게시판] 페이징 처리, 힌트(hint), ROWNUM & 인라인뷰 적용 (0) 2022.08.28 [3-ch11 Spring view] 게시글 조회, 수정/삭제, 뒤로가기 처리 (0) 2022.08.26