Spring security Spring security在运行JUnit测试时不调用我的自定义身份验证筛选器

Spring security Spring security在运行JUnit测试时不调用我的自定义身份验证筛选器,spring-security,mockmvc,Spring Security,Mockmvc,我正试图通过以下步骤,使用Spring安全性实现自定义无状态身份验证 我面临的问题是,框架没有调用我的自定义过滤器,即使我的SecurityConfig看起来与上一个链接中的几乎相同(稍微简单一点): 我没有发布authenticationProvider和appAuthenticationFilter的代码,因为前者工作正常(我可以使用/login端点登录),后者只实现了GenericFilterBean,甚至没有被调用 任何帮助都将不胜感激 好的,在我注意到在部署Spring Boot应用程

我正试图通过以下步骤,使用Spring安全性实现自定义无状态身份验证

我面临的问题是,框架没有调用我的自定义过滤器,即使我的SecurityConfig看起来与上一个链接中的几乎相同(稍微简单一点):

我没有发布authenticationProvider和appAuthenticationFilter的代码,因为前者工作正常(我可以使用/login端点登录),后者只实现了GenericFilterBean,甚至没有被调用


任何帮助都将不胜感激

好的,在我注意到在部署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();