3

我们的应用程序使用 spring security 对 Urls 进行过滤,如下所示:

<intercept-url pattern="/resources/**" access="ROLE_ANONYMOUS,ROLE_USER"/>

我们想编写一个单元测试,它采用 Url 列表并检查每个方法(GET、POST、PUT ..)是否可访问。

我正在考虑使用,DelegatingFilterProxy但不确定如何config/context在我们的web.xml.

这是一种有效的方法还是可取的方法?

4

2 回答 2

0

您可以通过 @Autowire DelegatingFilterProxy 为您的拦截 URL 创建测试,并使用 MockHttpServletRequest、MockHttpServletResponse 和 MockFilterChain 来验证结果。

如果您使用的是 Spring MVC,您可以查看支持过滤器(包括 Spring Security)的 Spring Test MVC。您可以在存储库中找到一个示例。请注意,Spring Test MVC 包含在 Spring 3.2+ 中(在 spring-test 模块中)。它也可以作为 Spring 3.1 的外部模块使用。

于 2013-01-25T21:09:53.493 回答
0

在我的测试中,涉及拦截 URL:

@ContextConfiguration({
        "classpath:spring/spring-app.xml",
         ...
})
@WebAppConfiguration
@RunWith(SpringJUnit4ClassRunner.class)
@Transactional
public class ControllerTest {

    private static final CharacterEncodingFilter CHARACTER_ENCODING_FILTER = new CharacterEncodingFilter();

    static {
        CHARACTER_ENCODING_FILTER.setEncoding("UTF-8");
        CHARACTER_ENCODING_FILTER.setForceEncoding(true);
    }

    protected MockMvc mockMvc;

    @Autowired
    private WebApplicationContext webApplicationContext;

    @PostConstruct
    private void postConstruct() {
        mockMvc = MockMvcBuilders
            .webAppContextSetup(webApplicationContext)
            .addFilter(CHARACTER_ENCODING_FILTER)
            .apply(springSecurity())
            .build();
    }

    @Test
    public void testUsers() throws Exception {
        mockMvc.perform(get("/users")
            .with(authentication(new UsernamePasswordAuthenticationToken("user", "password")))
            .andDo(print())
            .andExpect(status().isOk())
            .andExpect(view().name("users"))
            .andExpect(forwardedUrl("/WEB-INF/jsp/users.jsp"));
    }
    ...
于 2016-11-06T17:44:23.083 回答