본문 바로가기

프로그래밍/Java

No thread-bound request found

반응형

No thread-bound request found 오류

RequestContextHolder에서 request를 가져오려는데 다음과 같은 오류가 발생했다.

HttpServletRequest httpServletRequest = ((ServletRequestAttributes) RequestContextHolder.currentRequestAttributes()).getRequest();

java.lang.IllegalStateException: No thread-bound request found: 
Are you referring to request attributes outside of an actual web request, or processing a request outside of the originally receiving thread? 
If you are actually operating within a web request and still receive this message, 
your code is probably running outside of DispatcherServlet/DispatcherPortlet: 
In this case, use RequestContextListener or RequestContextFilter to expose the current request.

원인

검색해보니 쓰레드세이프하지 않은 메서드에서 사용한다거나, 스케줄러 등 실질적인 request가 없는 곳에서 사용했을 때, static 메서드에서 사용했을 경우 등에서 발생하는 것 같다.

내 경우에는 다음과 같이 파라미터로 넘겨받도록 수정해서 해결했다.

해결

public LoginResponse login() {
    HttpServletRequest httpServletRequest = ((ServletRequestAttributes) RequestContextHolder.currentRequestAttributes()).getRequest();         
    something(httpServletRequest); // ....  
}

protected something(HttpServletRequest httpServletRequest) {
    //HttpServletRequest httpServletRequest = ((ServletRequestAttributes) RequestContextHolder.currentRequestAttributes()).getRequest(); // 여기 서 지우고
}
반응형

개발자가 그리는 인스타툰 팔로우하세요!