0

私はSpringとSpringのセキュリティに非常に慣れていません!

いくつかのチュートリアルに従った後、Spring Security をアプリケーションに実装しようとしています。私が抱えている問題は、クラスUserDetailsImplをスタブでテストしたいということです。そのため、Spring に、作成したスタブとして 2 つのオブジェクトを注入してもらいたいと思います (それらはインターフェイスから実装されます)。このようにして、テストを実行するとスタブが実装されますが、本番コード中には通常の実際の実装が挿入されます。残念ながら、私はNullPointerException. これは私のコードです:

注入する必要があるクラス:

package com.somePackageName.security;

imports...

@Component
public class UserDetailsImpl implements UserDetails {

@Autowired
IUserFactory userFactory;

public void setUserFactory(IUserFactory userFactory){
    this.userFactory = userFactory;
}

@Autowired
IUser user;

public void setUser(IUser user){
    this.user = user;
}

IUser & IUserFactory はインターフェイスです。

これはIUserFactory私が実装したいスタブです:

package com.somePackageName;

import com.su.rbac.virtuoso.IUser;
import com.su.rbac.virtuoso.IUserFactory;

public class StubUserFactory implements IUserFactory {

public StubUserFactory(){}

@Override
public IUser findUserWithUsername(String username) {
    return new StubUser();
}

@Override
public IUser createUser(String username, String password) {
    return new StubUser();
}
}

そして最後に私のapplication-context.xmlファイル:

<global-method-security pre-post-annotations="enabled"/>
<context:annotation-config />
<context:component-scan base-package="com.somePackageName" />

<beans:bean id="userDetailsImpl" class="com.somePackageName.security.UserDetailsImpl">
    <!--
    <beans:property name="userFactory" value="com.somePackageName.StubUserFactory"/>
    <beans:property name="user" value="com.somePackageName.StubUser"/>
    -->

    <beans:property name="userFactory" ref="StubUserFactory"/>
    <beans:property name="user" ref="StubUser"/>
</beans:bean>

<beans:bean id="StubUser" class="com.somePackageName.StubUser"/>
<beans:bean id="StubUserFactory" class="com.somePackageName.StubUserFactory"/>

私が得ているエラーは次のとおりです。

java.lang.NullPointerException
at com.somePackageName.security.UserDetailsImpl.<init>(UserDetailsImpl.java:44)
at com.somePackageName.security.QuadstoreUserService.loadUserByUsername(QuadstoreUserService.java:23)
at com.somePackageName.SpringSecurityTest.firstTest(SpringSecurityTest.java:41)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:44)
at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:15)
at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:41)
at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:20)
at org.junit.internal.runners.statements.RunBefores.evaluate(RunBefores.java:28)
at org.springframework.test.context.junit4.statements.RunBeforeTestMethodCallbacks.evaluate(RunBeforeTestMethodCallbacks.java:74)
at org.springframework.test.context.junit4.statements.RunAfterTestMethodCallbacks.evaluate(RunAfterTestMethodCallbacks.java:83)
at org.springframework.test.context.junit4.statements.SpringRepeat.evaluate(SpringRepeat.java:72)
at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.runChild(SpringJUnit4ClassRunner.java:231)
at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.runChild(SpringJUnit4ClassRunner.java:88)
at org.junit.runners.ParentRunner$3.run(ParentRunner.java:193)
at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:52)
at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:191)
at org.junit.runners.ParentRunner.access$000(ParentRunner.java:42)
at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:184)
at org.springframework.test.context.junit4.statements.RunBeforeTestClassCallbacks.evaluate(RunBeforeTestClassCallbacks.java:61)
at org.springframework.test.context.junit4.statements.RunAfterTestClassCallbacks.evaluate(RunAfterTestClassCallbacks.java:71)
at org.junit.runners.ParentRunner.run(ParentRunner.java:236)
at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.run(SpringJUnit4ClassRunner.java:174)
at org.junit.runner.JUnitCore.run(JUnitCore.java:157)
at com.intellij.junit4.JUnit4IdeaTestRunner.startRunnerWithArgs(JUnit4IdeaTestRunner.java:77)
at com.intellij.rt.execution.junit.JUnitStarter.prepareStreamsAndStart(JUnitStarter.java:195)
at com.intellij.rt.execution.junit.JUnitStarter.main(JUnitStarter.java:63)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
at com.intellij.rt.execution.application.AppMain.main(AppMain.java:120)

インターネット上で適切で明確な例が見つからないように見えるので、私は本当にこれにこだわっています。よろしくお願いします!

4

1 に答える 1

1

注釈が有効になっていないようです。追加してみてください:

<context:annotation-config />
<context:component-scan base-package="<your_package_name>,<your_another_package_name>" />

xmlns:

xmlns:context="http://www.springframework.org/schema/context"

xsi スキーマの場所:

http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.1.xsd
于 2013-07-26T08:19:40.997 に答える