如何捕获身份验证事件?

cid*_*cid 3 spring-security

我尝试了以下方法:

<bean id="authenticationManager" class="org.springframework.security.authentication.ProviderManager">

    <property name="providers">
        <list>
          <ref local="myAuthnProvider"/>
        </list>
      </property>

    <property name="authenticationEventPublisher">
        <bean class="myPublisher/>
    </property>
</bean>

<security:authentication-manager>
    <security:authentication-provider ref="authenticationManager" />
</security:authentication-manager>
Run Code Online (Sandbox Code Playgroud)

但我在启动时遇到异常.我也尝试了构造函数标记,结果相同:

Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'org.springframework.security.authenticationManager': Could not resolve matching constructor (hint: secify index/type/name arguments for simple parameters to avoid type ambiguities) 
at org.springframework.beans.factory.support.ConstructorResolver.autowireConstructor(ConstructorResolver.java:250)
Run Code Online (Sandbox Code Playgroud)

我正在使用spring 3.1.1.

任何想法为什么抛出这个错误?或者有关如何捕获身份验证事件的其他建议?谢谢.

zag*_*gyi 6

如果您想要做的只是获得有关身份验证事件的通知,那么您不必自定义AuthenticationManager.它足以实现ApplicationListener如下所示的接口,并将这种类型的bean放在配置安全性的相同spring环境中.

public class AuthenticationEventListener 
        implements ApplicationListener<AbstractAuthenticationEvent> {

    @Override
    public void onApplicationEvent(AbstractAuthenticationEvent event) {
        // process the event
    }
}
Run Code Online (Sandbox Code Playgroud)