Spring:如何测试需要Spring Security的过滤器

时间:2018-02-23 12:14:53

标签: spring unit-testing spring-security

我编写了一个在HTTP请求的Principal上运行的过滤器。因此,在我的应用程序中,我确保它在Spring Security过滤器之后运行。它工作正常。

但是,我在测试时遇到了麻烦。我阅读this并按照步骤创建此测试:

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration
@WebAppConfiguration
public class MyTest {
    @Autowired
    private WebApplicationContext context;

    @Autowired
    private Filter springSecurityFilterChain;

    private MockMvc mvc;
    @Before
    public void setup() {
        mvc = MockMvcBuilders
                .webAppContextSetup(context)
                .addFilters(springSecurityFilterChain, new MyFilter())
                .build();
    }

    @Test
    public void anonymousCallsNotLogged() throws Exception {
        mvc.perform(post("/").with(anonymous()));
    }

    public static class MyFilter extends GenericFilterBean {
        @Override
        public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
            filterChain.doFilter(servletRequest, servletResponse);
        }
    }

    @Configuration
    @EnableWebSecurity
    @EnableWebMvc
    static class Config extends WebSecurityConfigurerAdapter {
    }
}

当我调试它时,我看不到我的过滤器,但我确实看到Spring Security过滤器工作。

但是,当我切换订单时:

.addFilters(new MyFilter(), springSecurityFilterChain)

我看到两个火。不幸的是错误的顺序!看起来Spring Security的东西并没有调用过滤器链的其余部分。

我的问题是 - 为什么会发生这种情况,我该怎么办呢?

0 个答案:

没有答案