【发布时间】:2014-09-09 14:17:11
【问题描述】:
我想让当前请求对子线程可用,而不是将原始请求作为方法参数通过多个层传递。该应用程序既可以作为 servlet 也可以作为 portlet 运行。
通常,DispatcherServlet 和 DispatcherPortlet 将当前请求设置为当前线程上的 RequestContextHolder。这样,调用线程就可以访问当前请求。请求不会传播到子线程。
在我的例子中,请求产生了一个子线程,它使用 RestTemplate 进行 ReST 调用,我需要访问拦截 RestTemplate 的 ClientHttpRequestInterceptor 中的原始请求。传过来拦截的请求没用,我要的是命中服务器的原始请求。
DispatcherServlet 和 DispatcherPortlet 都具有将 RequestContext 传递给子线程的功能:setThreadContextInheritable(true)。但是,将该标志设置为 true 似乎并不容易。没有设置它的 init-param,通常您在 web.xml 或 portlet.xml 中指定它们。
有没有办法通过使用xml 配置的setter 来定制调度程序portlet 或servlet?我发现的唯一方法是编写一个自定义 dispatcherservlet/portlet,它在内部将标志设置为 true,并在 web.xml 和 portlet.xml 中使用它。
【问题讨论】:
标签: java spring spring-mvc spring-portlet-mvc requestcontext