Google app engine Spring安全性:autowire ProviderManager

Google app engine Spring安全性:autowire ProviderManager,google-app-engine,spring-security,spring,Google App Engine,Spring Security,Spring,我正在尝试使用Spring Security以编程方式验证用户登录/通行证,因此我需要访问ProviderManager。我希望它能自动注入我的@控制器 我的代码如下所示: import org.springframework.security.authentication.ProviderManager; // ... @Controller public class MyController { @Autowired private ProviderManager au

我正在尝试使用Spring Security以编程方式验证用户登录/通行证,因此我需要访问
ProviderManager
。我希望它能自动注入我的
@控制器

我的代码如下所示:

import org.springframework.security.authentication.ProviderManager;

// ...

@Controller
public class MyController {

    @Autowired
    private ProviderManager authenticationManager;
但当我尝试运行应用程序时,会收到以下错误消息:

No unique bean of type [org.springframework.security.authentication.ProviderManager] is defined: 
expected single matching bean but found 2: 
[org.springframework.security.authentication.ProviderManager#0, org.springframework.security.authenticationManager]
原因可能是什么?我如何解决

我在Spring3.0.1中使用SpringSecurity3.0.0-RC1,并且我没有定义任何
ProviderManager
bean。我成功地使用了:

@Resource
private ProviderManager authenticationManager;

在其他项目中,但GAE不支持
javax.annotation.Resource

上下文中有两个
AuthenticationManager
s:

  • org.springframework.security.authenticationManager
  • org.springframework.security.authentication.ProviderManager#0
    由隐式声明的提供程序(记住我、匿名等)填充,并将身份验证请求委托给
    org.springframework.security.authenticationManager
所以,我想你需要

@Autowired @Qualifier("org.springframework.security.authenticationManager")

上下文中有两个
AuthenticationManager
s:

  • org.springframework.security.authenticationManager
  • org.springframework.security.authentication.ProviderManager#0
    由隐式声明的提供程序(记住我、匿名等)填充,并将身份验证请求委托给
    org.springframework.security.authenticationManager
所以,我想你需要

@Autowired @Qualifier("org.springframework.security.authenticationManager")

错误消息消失,包括身份验证管理器的别名:

<sec:authentication-manager alias="authenticationManager">


并升级到Spring Security 3.0.0 finale。

错误消息消失,包括身份验证管理器的别名:

<sec:authentication-manager alias="authenticationManager">


并升级到Spring Security 3.0.0大结局。

谢谢,我不知道@Qualifier annotation。你知道它是否与似乎也能解决问题的“alias”属性()有某种关联吗?@Guido:是的,你的解决方案的工作原理几乎相同
@Qualifier
在您的解决方案选择一个bean时,使用指定的名称选择该bean,因为它的别名与字段名匹配。谢谢,我不知道@Qualifier注释。你知道它是否与似乎也能解决问题的“alias”属性()有某种关联吗?@Guido:是的,你的解决方案的工作原理几乎相同
@Qualifier
当您的解决方案选择一个bean时,使用指定的名称选择该bean,因为它的别名与字段名匹配。