[SpringBoot] 하나의 form을 재활용 하기 위한 방법 (ex_등록,수정을 하나의 form으로 <csrf>)
2023. 3. 31. 14:30ㆍspring
게시판 중 게시글 수정을 구현하고 있었다.
기존에는 수정을 위한 form을 새로 만들었는데 의미없는 중복 코드가 발생함을 느꼈다.
방법이 없을까 하고 찾아보니 역시 있었다.
간단하게 예를 들어보았다. 참고로 타임리프와 spring security를 사용한다.
<form th:object="${questionForm}" method="post">
<input type="hidden" th:name="${_csrf.parameterName}" th:value="${_csrf.token}" />
<div class="mb-3">
<label for="subject" class="form-label">제목</label>
<input type="text" th:field="*{subject}" class="form-control">
</div>
<div class="mb-3">
<label for="content" class="form-label">내용</label>
<textarea th:field="*{content}" class="form-control" rows="10"></textarea>
</div>
<input type="submit" value="저장하기" class="btn btn-primary my-2">
</form>
- action 속성을 삭제하고 CSRF 값을 설정하기 위한 hidden 형태의 input 엘리먼트를 수동으로 추가한다.
- 스프링 시큐리티의 규칙에 따라 CSRF 값을 수동으로 추가하기 위해서는 다음과 같이 해야 한다.
- action 속성 없이 폼을 전송하면 현재의 URL을 기준으로 전송이 된다.
- 즉, 질문 등록시에 브라우저에 표시되는 URL은 /question/add이기 때문에 POST로 폼 전송시 action 속성에 /question/add가 설정이 되고, 질문 수정시에 URL은 /question/modify/2 형태의 URL이기 때문에 POST로 폼 전송시 action 속성에 /question/modify/2 형태의 URL이 설정이 된다.
'spring' 카테고리의 다른 글
[SpringBoot] @ToString(callSuper = true) (0) | 2023.04.13 |
---|---|
[SpringBoot] 글 삭제했을 때 원래 페이지로 redirect 되게 하기 (0) | 2023.03.31 |
[SpringBoot] @Builder.Default / 클래스 내에서 필드 초기화 / NullPointException (0) | 2023.03.21 |
[SpringBoot] 실행 전 데이터 세팅 방법, CommandLineRunner (0) | 2023.03.20 |
[SpringBoot] 쿠키와 세션 (0) | 2023.03.16 |