1. ホーム
  2. java

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パターンと、どのようなメソッドが必要かを選択する必要があることを意味します。