2

アプリケーションで spring-security (3.0.5.RELEASE) を使用しています。このアプリケーションは、API とユーザーの制限付きアクセスをホストします。アプリケーションの両側で認証するために spring-security を使用したいと考えています。

  • API は mydomain/api/* にあります
  • ユーザー制限付きアクセスは mydomain/restricted/* にあります

API 認証は、一種の api_key によって行う必要があります

ユーザーアクセス認証はログインフォームによって行われます

最初の質問は: 可能ですか?
はいの場合、どうすればできますか?私はインターネットでたくさんのことを読みましたが、それを行う方法がわかりません(Spring 3.1にアップグレードすることを除いて...)

どんな助けでも大歓迎です...

よろしく

4

1 に答える 1

3

Spring Security 3.1 へのアップグレードは、これをきれいに行うための最良の方法です。それができない場合でも、目的の結果を得ることができますが、それほどきれいにはなりません。リソースが URL 空間できれいに分離されている場合 (そうであるように見えます)、/api リソースのみをカバーする 2 つ目の Spring Security フィルターを追加し、デフォルトのリソースの前に適用されるようにします。Spring Security 3.0 で構成を分離するには、2 番目のフィルター用に別のアプリケーション コンテキストが必要であり、よく知られた場所でそれを見つけるようにフィルターを構成します。たとえば、DispatcherServlet はコンテキストを作成し、関連する属性のサーブレット コンテキストに格納します。その名前 (以下の例では「api」):

<filter>
    <filter-name>apiSecurityFilterChain</filter-name>
    <filter-class>org.springframework.web.filter.DelegatingFilterProxy</filter-class>
    <init-param>
        <param-name>contextAttribute</param-name>
        <param-value>org.springframework.web.servlet.FrameworkServlet.CONTEXT.api</param-value>
    </init-param>
</filter>

    <filter-mapping>
    <filter-name>apiSecurityFilterChain</filter-name>
    <url-pattern>/api/*</url-pattern>
</filter-mapping>

<servlet>
    <servlet-name>api</servlet-name>
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
</servlet>

この例のディスパッチャー サーブレットには/WEB-INF/api-servlet.xmlid="apiSecurityFilter".

于 2012-11-13T18:13:36.320 に答える