0

カスタムオーセンティケーターを使用する3.0.2applicationContext-security.xmlが機能しています

<global-method-security pre-post-annotations="disabled">

</global-method-security>

<http use-expressions="true">

    <intercept-url pattern="/diagnostics/**" access="hasRole('ROLE_USER')" />


    <form-login login-page="/genesis" default-target-url="/diagnostics/start-diagnostics"
      authentication-failure-url="/genesis?authfailed=true"
      authentication-success-handler-ref="customTargetUrlResolver"/>
      <access-denied-handler error-page="/genesis?notauthorized=true"/>

     <logout logout-success-url="/genesis"/> 
    <session-management session-authentication-error-url="/genesis"> 
        <concurrency-control max-sessions="1" expired-url="/genesis?sessionExpired=true"/> 
    </session-management>
</http>

<authentication-manager>
<authentication-provider ref="genesisAuthenticator">
    <jdbc-user-service data-source-ref="dataSource"/>
</authentication-provider>
</authentication-manager>

<beans:bean id="genesisAuthenticator" class="com.blackbox.x.web.security.Authenticator"/>
<beans:bean id="customTargetUrlResolver" class="com.blackbox.x.web.security.StartPageRouter"/>   

</beans:beans>

3.1.2にアップグレードした後、アプリケーションが起動せず、エラーメッセージが表示されます

「構成の問題:「ref」属性とともに使用すると、authentication-provider要素は子要素を持つことができません」。問題は

<jdbc-user-service data-source-ref="dataSource"/>

data-source-refがapplication-context.xmlファイルの定義を指す要素。

<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource">
<property name="driverClassName" value="com.mysql.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://localhost:3306/genesis"/>
<property name="username" value="dbuser"/>
<property name="password" value="********"/>

これを機能させるには何をする必要がありますか。3.0.2に戻すことは、実際にはオプションではありません。

4

1 に答える 1

0

<security:authentication-provider ref="yourImpl">カスタムAuthenticationProvider実装を使用する場合は、「従来の」Spring の方法で XML で構成する必要がありますUserDetailsService。あなたの例では、 Beanjdbc-user-serviceを作成するための単なるショートカットを使用しようとしました。JdbcDaoImpl

genesisAuthenticatorしたがって、 Spring Security ではなく、すべての依存関係が自分で解決されるようにする必要があります。つまり@Autowired setUserDetailsService(UserDetailsService userDetailsService)、Bean にメソッドを追加するか、次のように (id属性を使用して) XML で構成する必要があります。

<beans:bean id="genesisAuthenticator"
    class="com.blackbox.x.web.security.Authenticator">
  <property name="userDetailsService" ref="jdbcUserService"/>      
</beans:bean>

<jdbc-user-service id="jdbcUserService" data-source-ref="dataSource" />
于 2012-08-27T09:30:36.003 に答える