10

アプリケーションのフレックス部分にPreAuthenticatedProcessingFilterEntryPointを使用するセキュリティコンテキスト定義が1つあります。アプリケーションの別の部分にhtmlフォームで標準フォームログインを使用する別の定義を作成するにはどうすればよいですか?これが私が現在持っているものです:

    <?xml version="1.0" encoding="UTF-8"?>
<beans:beans xmlns="http://www.springframework.org/schema/security"
    xmlns:beans="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.0.xsd
                        http://www.springframework.org/schema/security http://www.springframework.org/schema/security/spring-security-2.0.1.xsd">


    <http auto-config="true" access-denied-page="/admin/access-denied">
        <intercept-url pattern="/admin/login*" filters="none"/>
          <intercept-url pattern="/admin/access-denied" filters="none"/>
        <intercept-url pattern="/admin/**/*" access="ROLE_ADMIN"  />
        <form-login login-page="/admin/login" authentication-failure-url="/admin/login?login_error=1"
           default-target-url="/admin/index" login-processing-url="/admin/login-process"/>
        <logout logout-success-url="/admin/login"/>

    </http>

<global-method-security  jsr250-annotations="enabled" />

    <beans:bean id="preAuthenticatedEntryPoint" class="org.springframework.security.ui.preauth.PreAuthenticatedProcessingFilterEntryPoint" >
    </beans:bean>


    <beans:bean id="userAccountManager" class="com.mycomp.service.managers.jpa.UserAccountJpaManager" />
    <beans:bean id="userService" class="com.mycomp.auth.DefaultUserDetailsService" />
    <beans:bean id="defaultPasswordEncoder" class="com.mycomp.auth.DefaultPasswordEncoder" />

    <authentication-provider user-service-ref="userService">
        <password-encoder ref="defaultPasswordEncoder"/>
    </authentication-provider>


</beans:beans>

私がやりたいのは、管理サイトにあるURLに別の認証プロバイダーを使用することです。現在私が持っているのはflexアプリケーション用です。したがって、管理URLのセキュリティで別のuserDetailsS​​erviceBeanを使用する必要があります。

4

3 に答える 3

12

最近まで難しいことでしたが、今では簡単です!

Spring Securityは、バージョン3.1でシナリオのサポートを追加しました。現在、SEC-1171によって実装されたリリース候補として利用可能です。構文の詳細は、3.1に含まれているマニュアルに記載されています。

使い方はとても簡単です。http基本的には、Spring Security構成で、コンテキストごとに1つずつ、複数の要素を定義するだけです。私たちはそれを次のように使用しています:

<!-- Configure realm for system administration users -->
<security:http pattern="/admin/**" create-session="stateless">
    <security:intercept-url pattern='/**' access='ROLE_ADMIN' requires-channel="https" />
    <security:custom-filter position="PRE_AUTH_FILTER" ref="preAuthFilter" />
</security:http>


<!-- Configure realm for standard users -->
<security:http auto-config="true" access-denied-page="/error/noaccess" use-expressions="true" create-session="ifRequired">
    <security:form-login 
            ...
            ...
</security:http>

注意すべき重要なことはpattern="/admin/**"、最初のhttp要素にあります。これにより、Springは、下のすべてのURL/adminがデフォルトのコンテキストではなくそのコンテキストの対象となることを通知します。したがって、下のURLは/admin代わりに事前承認フィルターを使用します。

于 2011-02-21T00:05:12.510 に答える
2

各フィルター チェーンを異なる URL パターンにマップします。

<bean id="myfilterChainProxy"
   class="org.springframework.security.util.FilterChainProxy">
  <security:filter-chain-map pathType="ant">
  <security:filter-chain pattern="/flex" filters="filterF"/>
  <security:filter-chain pattern="/**" filters="filter1,filter2,filter3"/>
  </security:filter-chain-map>
</bean>
于 2009-07-01T19:46:55.977 に答える
0

アプリケーションのどの部分が Spring Security フィルター チェーンによってインターセプトされるかがすべてです。xml 構成のどこかに (単純なタグ構成を行ったかどうかによって異なります)、次のようなインターセプト正規表現があります。

<intercept-url pattern="/**" ...>

さまざまな構成 (セキュリティ フィルター チェーンのさまざまな部分) を使用するさまざまなインターセプト パターンを使用できます。現在の構成xmlを投稿すると、より具体的な答えが得られます。

編集:現在、httpタグを使用して Spring Security 構成を定義しています。このタグはショートカット/ヘルパーとして使用され、手動で設定できるセキュリティ フィルター チェーンの多くの部分を自動定義します。あなたのユース ケースは自動セットアップ パラダイムに適合しないと思うので、さまざまな URL パターンのフィルター チェーンを手動でセットアップする必要があります (私の記事の下にあるように)。独自の PreAuthenticationFilter (カスタム UserDetailsS​​ervice を受け取る) を作成し、それをフィルター チェーンのインターセプト マッピングに適切な場所に追加できます。

于 2009-07-01T19:45:49.083 に答える