Spring MVCを使用してコントローラでOPTIONSリクエストをインターセプトしたいのですが、DispatcherServletによってキャッチされています。それをどうすれば管理できますか?Spring MVCでHTTPオプションを扱うには?
答えて
@RequestMapping(value="/youroptions", method=RequestMethod.OPTIONS)
public View getOptions() {
}
あなたは私が初心者のためのBozhoの答えにいくつかの詳細を追加してそのdispatchOptionsRequest
true
へ
実際には、DispatcherServletが要求をインターセプトして処理するため、それは機能しません。代わりにDispatcherServletを設定する必要があります。私はこの問題で多大な苦痛を負っていましたが、現在私はこの問題を部分的に解決しました。私はコミュニティのための私のソリューションを投稿したいと思ったが...私は100以上の評判を持っているのでstackoverflow私は自分自身の質問に答えるために私が8時間を待つように強制する。 – MaVVamaldo
アップデートを追加しました – Bozho
はい、解決策です。私はあなたの前に会っていたはずです、良い神! XD しかし、DispatcherServletはコントローラを委任する前に「何らかの作業」を行うため、これは「部分的」な解決策です。実際には、「許可」ヘッダーに触れていなくても、「許可されたメソッド」のリストでいっぱいになります。私の場合、それは問題ではありませんが、それは他の誰かのためだと思います。 – MaVVamaldo
を設定することでのDispatcherServletを設定する必要があります。 AJAX呼び出しを提供するために、正しい "Access-Control-Allow- *"ヘッダーを設定するなど、Spring ControllerにOPTIONS要求を管理させることが便利な場合があります。あなたは一般的な方法
@Controller
public class MyController {
@RequestMapping(method = RequestMethod.OPTIONS, value="/**")
public void manageOptions(HttpServletResponse response)
{
//do things
}
}
をしようとした場合のDispatcherServletは、クライアントのOPTIONS要求をインターセプトしますので、 しかし、それは動作しません。
回避策は非常に簡単です:次のようにあなたが...あなたのweb.xmlファイルからのDispatcherServletを設定する必要が
:
...
<servlet>
<servlet-name>yourServlet</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>
<param-name>dispatchOptionsRequest</param-name>
<param-value>true</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
...
「dispatchOptionsRequest」パラメータを追加し、trueに設定。
DispatcherServletは、OPTIONS処理をコントローラに委譲し、manageOption()メソッドが実行されます。
これが役に立ちます。
PS。正直言って、私はDispatcherServletが応答に許可されたメソッドのリストを追加することを知っています。私の場合、これは重要ではなかったし、私はその事を行かせた。多分、さらなる試験が必要になるかもしれません。
ただし、ハンドラメソッドがエンドポイント "/ x/y"に登録されている場合、これは機能しません。今では/ xへのOPTIONS要求は動作しますが、/ x/yには作用しません この問題を解決するオプションはありますか?このOPTIONS処理を登録されたすべてのエンドポイントに追加することを意味しますか?私は傍受者について考えますが、それ以外の方法はありますか? – wrm
上記の2つの回答を簡単に補足すると、サーブレット3(web.xmlなし)環境でdispatchOptionsRequestを有効にして、上記の回答をnon-xmlセットアップ。
spring 3.2/servlet 3環境では、web.xmlと同等のJavaであるDispatcherServlet
初期化子クラスがいくつかあります。私の場合はAbstractAnnotationConfigDispatcherServletInitializer
です。次のコードを追加すると、dispatchOptionsRequestを可能にします:
@Override
protected void customizeRegistration(Dynamic registration) {
registration.setInitParameter("dispatchOptionsRequest", "true");
}
私は、次のアプローチを取った:Mavenの(or manually)を使用して
は、この依存で引っ張っ:
<dependency>
<groupId>com.thetransactioncompany</groupId>
<artifactId>cors-filter</artifactId>
<version>1.3.2</version>
</dependency>
をこれがすべてキャプチャする実装を持っていますインバウンドOPTIONS要求。 web.xmlファイルに次の設定を追加してください:
私が/ **アプローチで見た問題は、より具体的なコントローラの実装がこれをオーバーライドします。
web.xmlファイルのないSpringでは、Paul Adamsonの回答に基づいて、Options
メソッド呼び出しを処理するために、パラメータdispatchOptionsRequest
をtrue
にディスパッチャに設定しました。春ブーツ上の方のため
ServletRegistration.Dynamic dispatcher = container.addServlet("dispatcher", new DispatcherServlet(applicationContext));
dispatcher.setInitParameter("dispatchOptionsRequest", "true");
dispatcher.setLoadOnStartup(1);
dispatcher.addMapping("/*");
- 1. Spring MVCでオプションのListBox値を扱う
- 2. HTTPステータスコード404 spring mvc
- 3. Spring MVC HTTPステータス400
- 4. Spring MVCコントローラでのモデルの扱い
- 5. Spring MVCのリターンカスタムHTTPステータスコード(エラーなし)Spring MVCの@RequestMapping注釈で
- 6. Spring MVCのHTTPステータス404エラー
- 7. Spring MVC - ファイルアップロード - Etat HTTP 500エラーメッセージ
- 8. HTTPステータス404 - spring mvc java web
- 9. HTTPステータス400 - Spring MVCエラー
- 10. HTTPステータス404 - Spring MVCコントローラ
- 11. HTTPステータス404 on jsp spring mvc
- 12. Spring MVCのカスタムHTTPメソッド
- 13. Gson:オプションのリストを扱う
- 14. Spring MVCでhttpリクエストを正しくログするには
- 15. Spring MVCでカスタムHTTPエラーコードを返すには?
- 16. Scalaのオプション[T]をスマートに扱う
- 17. 300 HTTPステータスコードを扱う
- 18. MVCライブラリのパスを扱う
- 19. Spring MVC:オプションとサービスレイヤーの例外対
- 20. HttpリクエストボディをSpring MVCに記録するには?
- 21. spring-mvcで同じ名前の<input>を複数扱う場合
- 22. HTTP POSTからの応答を伴うSpring MVCリダイレクト
- 23. HTTP 404 Spring MVC with TilesいいえXML
- 24. HTTPステータス400 - リクエストが悪い - Spring MVC
- 25. Spring MVC(Rest)のAngular 2 httpポスト
- 26. AngularJSとSpring MVC - $ http 400 Bad Request
- 27. HTTPステータス404 Apache TomcatエラーSpring MVC Java?
- 28. Spring 2.5でカスタムautowiredオブジェクトを扱うには?
- 29. HTTP res.bodyで受信したJPEGデータを扱うには?
- 30. Spring MVCのか、それは私がこのリンク <a href="http://www.mkyong.com/spring-mvc/spring-mvc-form-handling-annotation-example/" rel="nofollow">http://www.mkyong.com/spring-mvc/spring-mvc-form-handling-annotation-example/</a></p> <p>での例を見ていた
、このフォローアップの質問が役に立つことがあります。http://stackoverflow.com/questions/33331042/how-to-handle-http-options-requests-in-spring-boot – Jonik