Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/361.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/spring-mvc/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java MockMvc和Spring安全性-空过滤器ChainProxy_Java_Spring Mvc_Testing_Spring Security - Fatal编程技术网

Java MockMvc和Spring安全性-空过滤器ChainProxy

Java MockMvc和Spring安全性-空过滤器ChainProxy,java,spring-mvc,testing,spring-security,Java,Spring Mvc,Testing,Spring Security,我需要测试我的REST控制器,它们使用Spring Security进行保护。我正在使用MockMvc,正如spring安全参考文件所建议的那样 测试: 当我运行JUnit测试时,我得到了这个失败跟踪 位于的java.lang.NullPointerException org.springframework.security.web.FilterChainProxy.getFilters(FilterChainProxy.java:223) 另外,如果删除applicationContext.

我需要测试我的REST控制器,它们使用Spring Security进行保护。我正在使用MockMvc,正如spring安全参考文件所建议的那样

测试:

当我运行JUnit测试时,我得到了这个失败跟踪

位于的java.lang.NullPointerException org.springframework.security.web.FilterChainProxy.getFilters(FilterChainProxy.java:223)

另外,如果删除applicationContext.xml中的bean:

<bean id="springSecurityFilterChain" class="org.springframework.security.web.FilterChainProxy"/>

然后我得到了这个失败的痕迹:

java.lang.IllegalStateException:不能使用springSecurityFilterChain 无效的确保使用名为springSecurityFilterChain的Bean 存在实现筛选器或注入要使用的筛选器。在 org.springframework.security.test.web.servlet.setup.SecurityMockMVCConfiguer.beforeMockMvcCreated(SecurityMockMVCConfiguer.java:62)


我不知道为什么FilterChainProxy为空。在我的Web.xml中,我声明了DelegatingFilterProxy,过滤器名为springSecurityFilterChain,我的应用程序运行良好。请帮帮我!谢谢

我已经设法让它工作了。 只要确保您有正确的上下文配置。此外,您不需要声明FilterChainProxy bean。
感谢您使用
.webAppContextSetup
时,您可能忘记扩展
AbstractSecurityWebApplicationInitializer
以初始化安全筛选器

使用独立设置时,需要将她的安全配置添加到@ContextConfiguration并自动连接此bean:

 @Autowired
 FilterChainProxy springSecurityFilterChain;
然后像这样准备MockMvc:

MockMvc mockMvc = MockMvcBuilders
   .standaloneSetup(controller)
   .apply(SecurityMockMvcConfigurers.springSecurity(springSecurityFilterChain))
   .build();

>>>只要确保您有正确的上下文配置。如果人们知道他们的配置应该是什么样子,那么他们就不会来这篇文章了。除了“确保你有正确的上下文配置”这一答案可能适用于所有与spring相关的问题之外,提供更多的细节不是很好吗,如果不给读者一点关于真正解决方案的线索,你的答案就毫无用处,除非你把context.xml放在这里FilterChainProxy不是一个bean,
MockMvc mockMvc = MockMvcBuilders
   .standaloneSetup(controller)
   .apply(SecurityMockMvcConfigurers.springSecurity(springSecurityFilterChain))
   .build();