본문 바로가기
Develop/Spring+JPA

[Spring] HiddenHttpMethodFilter

by 연로그 2021. 2. 4.
반응형

web.xml을 살펴보던 와중 의문을 갖게 한 문제의 코드...

<filter>
	<filter-name>httpMethodFilter</filter-name>
	<filter-class>org.springframework.web.filter.HiddenHttpMethodFilter</filter-class>
</filter>
<filter-mapping>
	<filter-name>httpMethodFilter</filter-name>
	<servlet-name>dispatcher</servlet-name>
</filter-mapping>

( dispatcher는 org.springframework.web.servlet.DispatcherServlet를 등록한 서블릿의 이름이다. 이 글에서 중요한 사항이 아니라 생략했다. )

 

HiddenHttpMethodFilter가 뭘까?

REST 방식을 사용하다 보면 GET, POST, PUT, PATCH, DELETE를 이용한다.

하지만 PUT, PATCH, DELETE 방식의 메소드를 지원하지 않는 브라우저가 있을 수 있다.

이럴 때 해결책으로 브라우저에서는 POST 방식으로 전송하고, 추가적인 정보를 이용해 PUT, PATCH, DELETE 같은 정보를 전송한다. ( =Overloaded POST )

이를 위해서는 두 가지 방법이 있는데, HiddenHTtpMethodFilter를 web.xml에 설정하는 것은 그 방법 중 하나이다.

 

1. Ajax 통신

$.ajax({
	type:'delete',
	url: ~ ,
	headers:{
		"Content-Type": "application/json",
		"X-HTTP-Method-Override": "DELETE"},
		...
	},
	...
})

- 'X-HTTP-Method-Override' 이용한 overloaded post

 

2. form 태그

<form id="del-info-form" action="/boards/${bno}" method="post">
	<input type="hidden" name="_method" value="DELETE">
</form>

- post 방식이되, '_method' 이용한 overloaded post

- web.xml 파일에서 HiddenHttpMethodFilter를 추가해야 한다.

- <form>은 원래 GET, POST 방식만 지원하고, 다른 메소드들은 form의 역할과 거리가 멀다는 이슈가 있다. 이에 대해 자세한 사항이 궁금하다면 haah.kr/2017/05/23/rest-http-method-in-html-form/ 를 참고해도 좋다.

 


참고

velog.io/@ette9844/REST-PUT-PATCH-DELETE-%EB%AF%B8%EC%A7%80%EC%9B%90-%EC%B2%98%EB%A6%AC

반응형