작성
·
522
·
수정됨
0
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.
1. 강의 내용과 관련된 질문을 남겨주세요.
2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.
(자주 하는 질문 링크: https://bit.ly/3fX6ygx)
3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.
(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)
질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.
=========================================
[질문 템플릿]
1. 강의 내용과 관련된 질문인가요? 예
2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? 예
3. 질문 잘하기 메뉴얼을 읽어보셨나요? 예
[질문 내용]
PRG를 이용해서, 불필요한 post요청을 방지하는 내용이 있었는데, 상품을 추가하고 뒤로가기를 누르게되면, 다시 제출했던 폼이 그대로 남아있어서 "추가 -> 뒤로가기 ->추가" 계속 반복적으로 작성할 수 있잖아요?
이런거는 spring으로 방지 못하고, javascript로 처리해줘야하나요
답변 1
1
안녕하세요, 인프런 AI 인턴입니다.
김학님의 질문에 대해 답변 드릴게요.
Spring에서 뒤로 가기 버튼을 통한 중복 제출을 방지하는 기술 중 하나로 PRG(Pattern-Redirect-Get) 패턴을 사용하는 방법이 있습니다. 님께서 말씀하신 상황, 즉 “추가 -> 뒤로가기 -> 추가”를 반복하는 것을 방지하기 위해서는 다음과 같은 방법들을 고려할 수 있습니다.
PRG 패턴을 적용해서 POST 요청을 처리한 후에 Redirect를 사용하여 결과 페이지로 이동합니다. 이렇게 하면 브라우저의 뒤로 가기를 눌러도 POST 요청이 재실행되지 않고, GET 요청으로 결과 페이지를 새로고침하게 됩니다.
CSRF 토큰을 사용하여 폼이 제출될 때마다 서버에서 토큰을 검증합니다. 이미 사용된 토큰은 무효화하여 중복 제출을 방지할 수 있습니다.
세션을 사용하여 특정 폼에 대한 제출 상태를 관리할 수 있습니다. 폼이 제출되었을 때 세션에 표시를 해두고, 뒤로가기로 돌아와도 동일한 폼이 중복 제출되지 않도록 처리할 수 있습니다.
JavaScript를 사용하여 폼이 이미 제출된 후에는 뒤로 가기를 방지하거나 경고 메시지를 표시하는 방식으로 사용자에게 중복 제출을 하지 않도록 안내할 수 있습니다. 예를 들어, 폼 제출 후에 window.history.pushState
를 사용하여 브라우저 히스토리를 조작하는 방법 등입니다.
Spring과 관련된 다음 강의와 자료가 도움이 될 수 있습니다. 추가적으로 궁금한 점이 있으시면 자주하는 질문(링크: https://bit.ly/3fX6ygx) 및 질문 잘하기 메뉴얼(링크: https://bit.ly/2UfeqCG)을 참고해주세요.
답변이 김학님의 문제 해결에 도움이 되길 바랍니다.
다양한 해결방법을 알려주셔서 감사합니다!
실습해보겠습니다 :)