3

私はこのチュートリアルに従っていました: http://www.mkyong.com/spring-security/spring-security-hello-world-example/

の中にspring-security-xml

<http auto-config="true">
    <intercept-url pattern="/welcome*" access="ROLE_USER" />
</http>

そして web.xml で、実際のフィルターを定義する必要があります

<!-- Spring Security -->
<filter>
    <filter-name>springSecurityFilterChain</filter-name>
    <filter-class>
              org.springframework.web.filter.DelegatingFilterProxy
            </filter-class>
</filter>

<filter-mapping>
    <filter-name>springSecurityFilterChain</filter-name>
    <url-pattern>/*</url-pattern>
</filter-mapping>

だから私はこれを取得しません。インターセプトを 2 つの場所で 2 つの URL にマッピングしています。/welcome*/*. _ なぜこれらの両方が必要なのですか?ここで何か不足していますか?

4

2 に答える 2

9

DelegatingFilterProxySpringSecurityクラスではありません。SpringWebパッケージからです。

標準のサーブレット2.3フィルタのプロキシであり、フィルタインターフェイスを実装するSpring管理のBeanに委任します。SpringアプリケーションコンテキストでターゲットBeanの名前を指定する、web.xmlの「targetBeanName」フィルターinit-paramをサポートします。

使用する場合

<http auto-config="true">

</http>

Spring Securityは、名前を使用して(暗黙的に)Beanを作成し(これが、にspringSecurityFilterChainある理由です)、すべての要求()は(Spring Securityによって)それによって処理されます。<filter-name>springSecurityFilterChain</filter-name>web.xml/*

次に、Spring Securityを構成し、より具体的なURL(/*welcome)を指定します。

<intercept-url pattern="/welcome*" access="ROLE_USER" />

それは言うようなものです:

  • すべてのURLリクエスト(/*)はSpringSecurityが調査する必要があります
  • URLが一致する場合/welcome*、プリンシパルがROLE_USER役割を持つ必要があります。

アプリケーションでより高度なセキュリティ処理が必要な場合は、そのフィルターチェーンBeanを自分で作成し、すべてのフィルターを手動で構成できます。

例:

<!-- Filter Chain -->
<bean id="springSecurityFilterChain"
      class="org.springframework.security.web.FilterChainProxy">
    <constructor-arg>
        <list>
            <sec:filter-chain pattern="/favicon.ico"
                              filters="none"/>

            <sec:filter-chain pattern="/img/**"
                              filters="none"/>

            <sec:filter-chain pattern="/**" 
                 filters="bannedIPsFilter, <!-- custom filter -->
                         channelProcessingFilter,
                         securityContextPersistenceFilter,
                         concurrentSessionFilter,
                         logoutFilter,
                         secondAuthenticationFilter, <!-- custom filter -->
                         openIDAuthenticationFilter,
                         usernamePasswordAuthenticationFilter,
                         anonymousAuthenticationFilter,
                         captchaFilter, <!-- custom filter -->
                         sessionManagementFilter,
                         exceptionTranslationFilter,
                         filterSecurityInterceptor,
                         switchUserProcessingFilter"
                    />
        </list>
    </constructor-arg>
</bean>
于 2012-12-10T08:34:30.557 に答える
0

springSecurityFilterChainは、このフィルターチェーン内のすべてのスプリングセキュリティフィルターのファサードです。これは、web.xmlに個別のサーブレットフィルタとして登録されています。

/welcome*-スプリングセキュリティ固有の「内部」フィルターの構成であり、web.xmlには存在せず、サーブレットコンテナーはそれについて何も認識しません。

于 2012-12-10T08:39:53.923 に答える