0

非常に単純なシナリオ: 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 の null ref であるため、これは失敗します。

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 を自動配線すると、毎回そこに表示されます。

4

2 に答える 2

1
I just had the thought that I might be able to wire it up in the applicationContext, but not sure if that would work.

これはうまくいくでしょう。アプリケーション コンテキストでプロパティの接続を指定できます。ただし、これは自動配線と同じではありません ( AuthenticationProvider.

AppEngineUserStore をオートワイヤーしたい場合は、それをアプリケーション コンテキストに登録し、オートワイヤーをオンにする必要があります。これは次のように行うことができます。

<context:annotation-config />

以下を使用すると、Spring は Bean をスキャンして自動配線することもできます。

<context:component-scan base-package="com.my.package" />

これにより、自動配線が自動的にオンになります

于 2012-10-19T19:24:27.527 に答える
0

autowired を使用している場合は、スプリング コンテキストで注釈を使用していると言えます。

<context:annotation-config />

それ以外の場合は、xml ベースの DI を実行する必要があります。

于 2012-10-19T19:24:52.297 に答える