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