1. 변경 요지

  스프링을 사용하다보면 누구나 @Controller @RequestMapping단에서 HttpServletRequest request, HttpServletResponse response 를 매개변수로 받는 메소드를 많이 작성하였을 것이다.

사실 필요하든 하지 않든 선택이 아닌 거의 필수로 추후 사용을 위해서 넣은 경우도 많았을 것으로 보여진다.

 

2. 변경 형태

 1) HttpServletRequest와 HttpServletResponse를 매개변수에 사용하지 않고 스프링 리퀘스트 컨텍스트 홀더 (Spring RequestContextHolder) 영역에서 가져와 Java-Object의 call by Reference 형태로 사용한다.

 

 2) 주의점은 프로젝트마다 RequestContextHolder를 각 시스템 별로 Custom하여 작성하는 경우 제대로 동작하지 않을 수 있으며, 키보드 보안 프로그램과 연동하여 SecurityHttpServletRequest 식의 Wrapping 되어 있는 경우엔 사용에 이슈가 발생할 수 있으니 참고.

3. 소스 예시

package com.spring.def.util;

import org.springframework.stereotype.Component;
import org.springframework.web.context.request.RequestContextHolder;
import org.springframework.web.context.request.ServletRequestAttributes;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

@Component
public class RequestUtils {

	/**
	 * 매번 Method로 Request를 넘기는건 비효율적임에 따라 Spring 전역에서 사용 가능한 HttpServletRequest를 Utils로 불러온다.
	 *
	 * @return
	 */
	public HttpServletRequest getHttpServletRequest() {
		return ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest();
	}

	/**
	 * 매번 Method로 Response 넘기는건 비효율적임에 따라 Spring 전역에서 사용 가능한 HttpServletResponse를 Utils로 불러온다.
	 *
	 * @return
	 */
	public HttpServletResponse getHttpServletResponse() {
		return ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getResponse();
	}
}

 

  • 네이버 블러그 공유하기
  • 네이버 밴드에 공유하기
  • 페이스북 공유하기
  • 카카오스토리 공유하기