JSP & Servlet

Filter 에서 요청, 응답 값 조작하기. Wrapper 클래스

Jungsoomin :) 2020. 7. 17. 11:30

Filter에서 요청과 응답 값을 조작하는 것은, HttpServletRequestWrapper 클래스와 HttpSerlvetResponseWrapper 클래스로 한다. 생성자를 지정만 해준다면 HttpServletRequest를 매개값으로 굳이 전부 다 재정의 할 필요가 없는 Wrapper환경을 만들어 준다고 보면 될 듯 하다.

 

Filter의 doFilter메서드에서 값을 조작해야할 경우, 사용한다. 

  1. HttpServletRequestWrapper 클래스와 HttpSerlvetResponseWrapper 클래스를 상속한 클래스를 만든다.

  2. 상속클래스에서 원하는 메서드를 재정의한다.

  3. 해당 클래스를 생성하여 사용한다.

까지가 방법이다.

 

RequestWrapper클래스를 상속해서 getParameter 메서드를 재정의한 모습.

public class MyRequest extends HttpServletRequestWrapper{
	public MyRequest(HttpServletRequest request) {
		super(request);
		// TODO Auto-generated constructor stub
	}

	@Override
	public String getParameter(String name) {
		if(name.equals("name")) {
		String n = super.getParameter("name");
			if(n == null) {
				return "default name";
			}else {
				return n;
			}
		}
		return super.getParameter(name);
	}
	
}

Filter 구현클래스에서 사용된 모습이다.

public class FilterEx3 implements Filter {


    public FilterEx3() {
        // TODO Auto-generated constructor stub
    }


	public void destroy() {
		// TODO Auto-generated method stub
	}


	public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
		System.out.println("Filter 3 작동");
		MyRequest req = new MyRequest((HttpServletRequest)request);
//		변경된 request 메서드를 가진 HttpServletRequestWrapper를 Filter의 Chain으로 보냄
		
		chain.doFilter(req, response);
	}


	public void init(FilterConfig fConfig) throws ServletException {
		// TODO Auto-generated method stub
	}

}