HTTP 요청이 들어올 때마다, 현재 요청 및 세션 정보를 스레드 로컬 에 RequestAttributes 객체로 바인딩해주는 역할을 합니다.
RequestAttributes requestAttributes = RequestContextHolder.getRequestAttributes();
//RequestAttributes객체 가져오기.
if (requestAttributes instanceof ServletRequestAttributes) {
HttpServletRequest request = ((ServletRequestAttributes) requestAttributes).getRequest();
HttpSession session = request.getSession();
// request 및 session 사용.
} else {
// HTTP 요청이 없는 경우
System.out.println("현재 스레드에 HTTP 요청 정보가 없습니다.");
}
스레드 로컬에 저장되기 때문에, 어느 layer든 전역적으로 접근할 수 있다.
주로, Controller가 아닌 Business Layer 등에서 Request 객체를 참고하려 할 때 사용한다.
Business Method에 일일이 Request을 파라미터로 넘기기 애매할때 사용.
web.xml에 RequestContextListener 리스너 등록.
--- IN web.xml ---
<listener>
<listener-class>org.springframework.web.context.request.RequestContextListener</listener-class>
</listener>
RequestAttributes < AbstractRequestAttributes < ServletRequestAttributes