我只需使用@Autowired
就可以在Spring MVC控制器中访问我的会话:
@Autowired
private HttpSession session;
问题是,我现在在ClientHttpRequestInterceptor
内访问会话。
我尝试使用RequestContextHolder.getRequestAttributes()
,但结果是(有时 - 这是一个真正的问题)null
。我也尝试使用RequestContextHolder.currentRequestAttributes()
,但是IllegalStateException
会抛出以下消息:
找不到线程绑定请求:您是指在实际Web请求之外的请求属性,还是在最初接收的线程之外处理请求?如果您实际上是在Web请求中操作并仍然收到此消息,则您的代码可能在DispatcherServlet / DispatcherPortlet之外运行:在这种情况下,请使用RequestContextListener或RequestContextFilter来公开当前请求。
RequestContextListener
已注册web.xml
。
<listener>
<listener-class>org.springframework.web.context.request.RequestContextListener</listener-class>
</listener>
直接在ClientHttpRequestInterceptor
注入会话时出现同样的问题。
@Autowired
private HttpSession session;
我的问题是:如何访问HttpSession
中的当前ClientHttpRequestInterceptor
?
谢谢!
答案 0 :(得分:1)
您可以使用HttpSession
中的以下内容访问ClientHttpRequestInterceptor
:
public class CustomInterceptor implements ClientHttpRequestInterceptor {
@Override
public ClientHttpResponse intercept(HttpRequest request,
byte[] body,
ClientHttpRequestExecution execution) throws IOException {
HttpServletRequest httpServletRequest = ((ServletRequestAttributes) RequestContextHolder.currentRequestAttributes()).getRequest();
// get the current session without creating a new one
HttpSession httpSession = httpServletRequest.getSession(false);
// get whatever session parameter you want
String sessionParam = httpSession.getAttribute("parameter")
.toString();
}
}
答案 1 :(得分:0)