Spring Interceptor postHandleメソッドにHTTPヘッダーを追加する
-
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>
所属していません StackOverflow