OPTIONS Httpメソッドに対するSpring Securityの無効化
2023-09-16 19:37:42
質問
HTTPメソッドの種類によってSpring Securityを無効にすることは可能でしょうか?
我々は、httpリクエストのヘッダにAuthorizationトークンが添付されることを必要とするサービスを持つSpring RESTアプリケーションを持っています。私はそのためのJSクライアントを書いており、GET/POSTリクエストを送信するためにJQueryを使用しています。アプリケーションは、このフィルタコードでCORSが有効になっています。
doFilter(....) {
HttpServletResponse httpResp = (HttpServletResponse) response;
httpResp.setHeader("Access-Control-Allow-Origin", "*");
httpResp.setHeader("Access-Control-Allow-Methods", "POST, GET, OPTIONS, DELETE");
httpResp.setHeader("Access-Control-Max-Age", "3600");
Enumeration<String> headersEnum = ((HttpServletRequest) request).getHeaders("Access-Control-Request-Headers");
StringBuilder headers = new StringBuilder();
String delim = "";
while (headersEnum.hasMoreElements()) {
headers.append(delim).append(headersEnum.nextElement());
delim = ", ";
}
httpResp.setHeader("Access-Control-Allow-Headers", headers.toString());
}
しかし、JQuery が CORS の OPTIONS リクエストを送信すると、サーバーは Authorization Failed トークンで応答します。明らかに、OPTIONSリクエストは、認証トークンを欠いています。そこで、OPTIONSをSpring Security ConfigurationからSecurity Layerを逃れるようにすることは可能でしょうか?
どのように解決するのか?
次のことを試してみてください。
<ブロッククオート複数の要素を使用して、異なる URL に対して異なるアクセス条件を定義することができます。 しかし、それらはリストされた順番に評価され、最初にマッチしたものが使用されます。 はリストされた順に評価され、最初にマッチしたものが使用されます。そのため は最も具体的なマッチを一番上に置く必要があります。また メソッド属性を追加して、マッチを特定の HTTP メソッドに限定することもできます (GET, POST, PUT など) に限定することもできます。
<http auto-config="true">
<intercept-url pattern="/client/edit" access="isAuthenticated" method="GET" />
<intercept-url pattern="/client/edit" access="hasRole('EDITOR')" method="POST" />
</http>
上記は、傍受するurlパターンと、どのようなメソッドが必要かを選択する必要があることを意味します。
関連
-
FindBugの使用概要
-
CertificateException: XXXに一致するサブジェクトの代替DNS名が見つかりません 解決策
-
[解決済み] 私のJavaScriptコードは "No 'Access-Control-Allow-Origin' header is present on requested resource "というエラーを受け取りますが、Postmanはそうならないのはなぜですか?
-
[解決済み] CORSです。資格情報フラグが true の場合、Access-Control-Allow-Origin でワイルドカードを使用できない。
-
[解決済み] リクエストヘッダーフィールドAccess-Control-Allow-Headersはプリフライトレスポンスでそれ自身は許可されません。
-
[解決済み】AngularJS がクロスオリジンリソースに対して OPTIONS HTTP リクエストを実行する場合
-
[解決済み】Spring SecurityのRoleとGrantedAuthorityの違いについて
-
[解決済み】リクエストヘッダーフィールドのAccess-Control-Allow-Headersが許可されない。
-
[解決済み】CORS(cross-origin resource sharing)投稿リクエストを動作させる方法
-
[解決済み] Springセキュリティフィルタチェーンの仕組み
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
NullPointerException - java.lang.
-
java.sql.SQLException: executeQuery()でデータ操作文を発行できません。
-
Jsoup-Crawlingの動作
-
unsigned char* から const jbyte* {aka const signed char*} への変換が無効です。
-
Junitのユニットテストはjava.lang.Testを報告します。
-
List list = new ArrayList(); Error: ArrayList は型に解決できません。
-
XXX型を囲むインスタンスがJavaでアクセスできない
-
X11 DISPLAY変数が設定されていない」問題の解決方法
-
Server Tomcat v9.0 Server at localhost の起動に失敗しました。
-
WeChat小プログラム Bluetooth通信 Bluetoothモジュールデモ