非常簡單的場景:我使用Spring和Spring Security,並且我試圖將一個屬性注入到我的AuthenticationManager使用的AuthenticationProvider中。我只是認爲我可以將它連接到applicationContext中,但不確定這是否可行。如何將一個屬性注入到我沒有實例化的對象中?
的applicationContext.xml:
<http use-expressions="true">
<intercept-url pattern="/" access="permitAll" />
<intercept-url pattern="/**" access="hasRole('USER')"/>
<form-login login-page="/index" />
</http>
<authentication-manager alias="authenticationManager">
<authentication-provider ref="twitterAuthenticationProvider" />
</authentication-manager>
<beans:bean id="twitterAuthenticationProvider" class="com.bottlingday.model.auth.TwitterAuthenticationProvider" />
TwitterAuthenticationProvider:
public class TwitterAuthenticationProvider implements AuthenticationProvider
{
@Autowired
private AppEngineUserStore userStore;
static Log log = LogFactory.getLog(TwitterAuthenticationProvider.class.getName());
public void Test()
{
//userStore is always null here
log.info("test");
}
}
在我的控制器失敗,因爲userStore是TwitterAuthenticationProvider空裁判:
Authentication authentication = this.authenticationManager.authenticate(authToken);
這裏是確切的錯誤:
java.lang.NullPointerException
at com.bottlingday.model.auth.TwitterAuthenticationProvider.authenticate(TwitterAuthenticationProvider.java:33)
at org.springframework.security.authentication.ProviderManager.authenticate(ProviderManager.java:156)
at com.bottlingday.auth.TwitterAuthController.OauthCallback(TwitterAuthController.java:129)
編輯:我正在使用自動裝配,它適用於其他事情。如果我在MVC控制器中自動裝入一個AppEngineUserStore,它每次都會在那裏。
我正在使用自動裝配,它正在工作。請參閱編輯 – MStodd
這是您唯一的應用程序配置文件嗎? –
我的servlet也有一個上下文。那個包含 –
MStodd