Spring security Spring security在运行JUnit测试时不调用我的自定义身份验证筛选器
我正试图通过以下步骤,使用Spring安全性实现自定义无状态身份验证 我面临的问题是,框架没有调用我的自定义过滤器,即使我的SecurityConfig看起来与上一个链接中的几乎相同(稍微简单一点): 我没有发布authenticationProvider和appAuthenticationFilter的代码,因为前者工作正常(我可以使用/login端点登录),后者只实现了GenericFilterBean,甚至没有被调用Spring security Spring security在运行JUnit测试时不调用我的自定义身份验证筛选器,spring-security,mockmvc,Spring Security,Mockmvc,我正试图通过以下步骤,使用Spring安全性实现自定义无状态身份验证 我面临的问题是,框架没有调用我的自定义过滤器,即使我的SecurityConfig看起来与上一个链接中的几乎相同(稍微简单一点): 我没有发布authenticationProvider和appAuthenticationFilter的代码,因为前者工作正常(我可以使用/login端点登录),后者只实现了GenericFilterBean,甚至没有被调用 任何帮助都将不胜感激 好的,在我注意到在部署Spring Boot应用程
任何帮助都将不胜感激 好的,在我注意到在部署Spring Boot应用程序时正在执行过滤器,并且只有在运行测试时才调用过滤器之后,我找到了解决方案。然后我发现了这个帖子: 我忘了将我的模拟MVC配置为使用过滤器。最后,我的身份验证测试类如下所示:
@RunWith(SpringJUnit4ClassRunner.class)
@SpringApplicationConfiguration(classes = GasApplication.class)
@WebAppConfiguration
public class LoginControllerTest {
@Autowired
private WebApplicationContext context;
@Autowired
@Qualifier("appAuthenticationFilter")
private Filter appAuthenticationFilter;
private MockMvc mockMvc;
@Before
public void init() throws Exception {
this.mockMvc = MockMvcBuilders.webAppContextSetup(context)
.addFilter(appAuthenticationFilter, "/resource")
.build();
}
// Tests here...
}
要避免像前面的回答那样手动自动连线和设置过滤器,可以使用SecurityLockMVCConfigurers.springSecurity():
@RunWith(SpringJUnit4ClassRunner.class)
@SpringApplicationConfiguration(classes = GasApplication.class)
@WebAppConfiguration
public class LoginControllerTest {
@Autowired
private WebApplicationContext context;
@Autowired
@Qualifier("appAuthenticationFilter")
private Filter appAuthenticationFilter;
private MockMvc mockMvc;
@Before
public void init() throws Exception {
this.mockMvc = MockMvcBuilders.webAppContextSetup(context)
.addFilter(appAuthenticationFilter, "/resource")
.build();
}
// Tests here...
}
MockMvcBuilders
.webAppContextSetup(context)
.apply(SecurityMockMvcConfigurers.springSecurity())
.build();