10

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 オブジェクトのみをパラメーターとして取得します。内部のリクエストに付属する HTTP ヘッダーにアクセスするにはどうすればよいinvokeInternal()ですか?

おそらく機能する1つの方法は、ヘッダー値をThreadLocal変数に保存し、内部invokeInternal()でアクセスするサーブレットフィルターを作成することですが、これを行うためのより良い、より春のような方法はありますか?

4

3 に答える 3

19

これらのメソッドを追加できます。はTransportContextHolder、トランスポート (この場合は HTTP) に関連するデータをスレッド ローカル変数に保持します。HttpServletRequestからアクセスできますTransportContext

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;
}
于 2010-10-26T10:13:26.173 に答える
0

私は同じ種類の問題を抱えていました(この他の質問を参照してください)。WS に Content-Type ヘッダーを追加する必要がありました。私はサーブレットフィルターの道を歩みました。ほとんどの場合、Web サービスの HTTP ヘッダーを変更する必要はありません。しかし... 理論と実践には違いがある場合があります。

于 2010-10-20T08:22:05.497 に答える