我们的应用程序使用Spring安全性过滤Urls,如下所示:
<intercept-url pattern="/resources/**" access="ROLE_ANONYMOUS,ROLE_USER"/>
我们想编写一个单元测试,它会获取Url的列表并检查每个方法(GET,POST,PUT ..)是否可以访问。
我正在考虑使用DelegatingFilterProxy
,但不确定如何加载config/context
中的web.xml
。
这是一种有效的方法还是可取的?
答案 0 :(得分:0)
您可以通过@Autowire DelegatingFilterProxy为拦截URL创建测试,并使用MockHttpServletRequest,MockHttpServletResponse和MockFilterChain来验证结果。
如果您正在使用Spring MVC,您可以查看支持过滤器(包括Spring Security)的Spring Test MVC。你可以find a sample in the repository。请注意,Spring Test MVC包含在Spring 3.2+中(在弹簧测试模块中)。它也可作为Spring 3.1的外部模块。
答案 1 :(得分:0)
在我的测试中涉及intercept-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"));
}
...