Tag Archives: Filter

Java Web, Spring Restful 웹서비스를 위한 web.xml 필수 설정

<!-- HTTP Method Filter -->
<filter>
    <filter-name>httpMethodFilter</filter-name>
    <filter-class>org.springframework.web.filter.HiddenHttpMethodFilter</filter-class>
</filter>
<filter-mapping>
    <filter-name>httpMethodFilter</filter-name>
    <url-pattern>/*</url-pattern>
</filter-mapping>

바로 이거….

현재의 웹브라우저는 Http protocol의 post, get 두 가지 방식밖에 인식을 하지 못한다. 그래서 프로그래밍적으로 처리를 해 주는 경우가 대부분이다. 보통 jquery의 ajax 함수를 이용한 방법을 많이 쓰는것으로 알고 있다.

 

<form method=”post” action=”/join”>

<input type=”hidden” name=”_method” value=”put”/>

</form>

이런식으로 전송을 한다.

그러면 위의 필터가 이를 편집해준다.

 

못믿겠으면 직접 소스를 보시라능..

 

이것만 딱 써놓으면 한글이 깨진다.

<!-- Filters -->
<filter>
	<filter-name>encodingFilter</filter-name>
	<filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
	<init-param>
	<param-name>encoding</param-name>
		<param-value>UTF-8</param-value>
	</init-param>
</filter>
<filter-mapping>
	<filter-name>encodingFilter</filter-name>
	<url-pattern>/*</url-pattern>
	<dispatcher>REQUEST</dispatcher>
</filter-mapping>
<!-- HTTP Method Filter -->
<filter>
	<filter-name>httpMethodFilter</filter-name>
	<filter-class>org.springframework.web.filter.HiddenHttpMethodFilter</filter-class>
</filter>
<filter-mapping>
	<filter-name>httpMethodFilter</filter-name>
	<url-pattern>/*</url-pattern>
</filter-mapping>

이렇게 두개를 같이 써주면 한글이 안깨진다고 한다.

한글이 깨져서 이 필터 빼버린적은 있는데… 이렇게 하면 안깨지는지 아직 확인은 안해봤다.

 

둘다 단순한 기능을 하는 필터다. 캐릭터 인코딩 필터는 그냥 post로 전송된 내용을 인코딩해주는 필터고 rest filter는 http헤더의 메서드를 인식해서 변경해주거나
name=”_method” value=”post|get|put|delete…등”을 확인하고 http 헤더의 메서드를 변경해주는 역할을 한다.

Sevlet Filter에서 Session 사용샘플

public class LoginFilter implements Filter{

	@Resource(name="userService")
	private UserService userService;

	@Override
	public void destroy() {
		// TODO Auto-generated method stub
		System.out.println("destroy");
	}

	@Override
	public void doFilter(ServletRequest request, ServletResponse response,
			FilterChain chain) throws IOException, ServletException {
		// TODO Auto-generated method stub
		System.out.println("doFilter");

		HttpSession session = ((HttpServletRequest)request).getSession();

		User user = (User)session.getAttribute("auth");

		if(user==null){
			((HttpServletResponse)response).sendRedirect("");
		}

		User user2 = userService.get(user);

		//이거 꼭있어야 다음으로 넘어감
		chain.doFilter(request, response);

	}

	@Override
	public void init(FilterConfig arg0) throws ServletException {
		// TODO Auto-generated method stub
		System.out.println("init");

	}

}

별것은 아니지만 그냥 기록

필요한 사람이 있을지도 모르니