Spring Interceptor postHandleメソッドにHTTPヘッダーを追加する

StackOverflow https://stackoverflow.com/questions/246762

  •  05-07-2019
  •  | 
  •  

質問

postHandle()メソッドにHTTPヘッダーを追加しようとするSpring Interceptorがあります。

public void postHandle(HttpServletRequest req, HttpServletResponse resp, 
             Object obj1, ModelAndView mv)
        throws Exception {
        response.setHeader("SomeHeaderSet", "set");
        response.addHeader("SomeHeaderAdd", "added");
    }
}

ただし、setHeader()またはaddHeader()のどちらでもヘッダーは追加されません。

これはインターセプターで行うことも有効ですか?私はそれがうまくいくと思ったが、うまくいかない。

よろしく、 ダスティン

役に立ちましたか?

解決 2

まあ、私はそれを理解しました...キンダ...

JettyとTomcatで同じ問題が発生しました(MAYBEと表示され、コンテナの問題でした)。だから...

Springがコンテナに戻るまで、応答オブジェクトに正しいヘッダー値が含まれていることを確認するためにデバッグされました。結果:HttpServletResponseインスタンスにはまだ正しいヘッダー値がありました。

ヘッダーで何かをする前に、 response.setContentLength()を呼び出していたコードで見つけました。コメントアウトすると、すべて正常に動作します。

それで、残りの謎は、なぜ response.setContentLength()を呼び出すと物事がロックされ、ヘッダーの変更が許可されないのですか?コンテンツ本文が他のヘッダーと関係があるとは思いませんでした。

他のヒント

preHandleメソッドでヘッダーを設定しようとしましたか?それでもうまくいかない場合は、コンテナのフィルタを作成して、代わりにそこにヘッダを設定してみてください。

同様の問題がありました。web.xmlに次のものがある場合に動作します(理由はわかりません)

<filter>
  <filter-name>etagFilter</filter-name>
    <filter-class>org.springframework.web.filter.ShallowEtagHeaderFilter</filter-class>
</filter>

<filter-mapping>
  <filter-name>etagFilter</filter-name>
  <servlet-name>myServlet</servlet-name>
</filter-mapping>
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top