Spring에서 요청 범위 빈 을 설정하려고합니다 .
요청 당 한 번 빈이 생성되도록 성공적으로 설정했습니다. 이제 HttpServletRequest 객체에 액세스해야합니다.
빈은 요청 당 한 번 생성되기 때문에 컨테이너가 내 빈에 요청 객체를 쉽게 주입 할 수 있다고 생각합니다. 어떻게 할 수 있습니까?
답변
요청 범위 빈은 요청 객체와 자동 연결될 수 있습니다.
private @Autowired HttpServletRequest request;
답변
Spring 은 유형 의 래퍼 객체를 통해 현재 HttpServletRequest
객체 ( 현재 객체뿐만 아니라)를 노출합니다 . 이 래퍼 객체는 ThreadLocal에 바인딩되며 메서드 를 호출하여 얻습니다 .HttpSession
ServletRequestAttributes
static
RequestContextHolder.currentRequestAttributes()
ServletRequestAttributes
방법을 제공하고 getRequest()
, 현재 요청을 얻기 위해 getSession()
모두 범위에 저장된 속성을 얻을 수있는 현재 세션과 다른 방법을 얻을 수 있습니다. 다음 코드는 약간 못 생겼지 만 응용 프로그램의 모든 위치에서 현재 요청 객체를 가져옵니다.
HttpServletRequest curRequest =
((ServletRequestAttributes) RequestContextHolder.currentRequestAttributes())
.getRequest();
있습니다 RequestContextHolder.currentRequestAttributes()
방법은 인터페이스 및 요구 사항을 반환에 typecasted 할 ServletRequestAttributes
것을 구현 인터페이스를.
Spring Javadoc : RequestContextHolder | ServletRequestAttributes
답변
여기에서 제안한 HttpServletRequest
대로 as a method param을 삽입 할 수도 있습니다 . 예 :
public MyResponseObject myApiMethod(HttpServletRequest request, ...) {
...
}