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