如何在Spring-ws端点中访问HTTP头?

时间:2010-10-20 07:42:02

标签: java spring http-headers spring-ws

如何在Spring-ws端点访问HTTP头?

我的代码如下所示:

public class MyEndpoint extends AbstractMarshallingPayloadEndpoint {
  protected Object invokeInternal(Object arg) throws Exception {
      MyReq request = (MyReq) arg;
      // need to access some HTTP headers here
      return createMyResp();
  }
}

invokeInternal()仅获取未编组的JAXB对象作为参数。如何访问invokeInternal()内的请求附带的HTTP标头?

可能有用的一种方法是创建一个Servlet过滤器,将头值存储到ThreadLocal变量,然后在invokeInternal()内访问,但是有更好的,更类似Spring的方法吗?此?

2 个答案:

答案 0 :(得分:14)

您可以添加这些方法。 TransportContextHolder将在线程局部变量中保存与传输(本例中为HTTP)相关的一些数据。您可以从TransportContext访问HttpServletRequest

protected HttpServletRequest getHttpServletRequest() {
    TransportContext ctx = TransportContextHolder.getTransportContext();
    return ( null != ctx ) ? ((HttpServletConnection ) ctx.getConnection()).getHttpServletRequest() : null;
}

protected String getHttpHeaderValue( final String headerName ) {
    HttpServletRequest httpServletRequest = getHttpServletRequest();
    return ( null != httpServletRequest ) ? httpServletRequest.getHeader( headerName ) : null;
}

答案 1 :(得分:0)

我遇到了同样的问题(见other question)。我需要在我的WS中添加一个Content-Type标头。我走了Servlet过滤器的道路。大多数情况下,您不需要在Web服务中更改HTTP标头。但是......理论和实践之间有一段时间存在差异。