默認情況下,使用AntPathRequestMatcher。如果你添加另一種模式
<intercept-url pattern="/logList/*" access="ROLE_ADMIN" />
那麼它會工作。
下面是測試(注:在RegexRequestMatcher,同樣的模式既適用於/ logList /和/ logList):
@Test
public void antTest1() throws Exception {
AntPathRequestMatcher pathMatcher = new AntPathRequestMatcher("/loglist*");
MockHttpServletRequest mockRequest = new MockHttpServletRequest();
mockRequest.setScheme("http");
mockRequest.setPathInfo("/logList");
Assert.assertThat(pathMatcher.matches(mockRequest), is(true));
}
@Test
public void antTest2() throws Exception {
AntPathRequestMatcher pathMatcher = new AntPathRequestMatcher("/loglist/*");
MockHttpServletRequest mockRequest = new MockHttpServletRequest();
mockRequest.setScheme("http");
mockRequest.setPathInfo("/logList/");
Assert.assertThat(pathMatcher.matches(mockRequest), is(true));
}
@Test
public void regexTest3() throws Exception {
RegexRequestMatcher pathMatcher = new RegexRequestMatcher("/logList.*", "GET");
MockHttpServletRequest mockRequest = new MockHttpServletRequest();
mockRequest.setScheme("http");
mockRequest.setMethod("GET");
mockRequest.setPathInfo("/logList/");
Assert.assertThat(pathMatcher.matches(mockRequest), is(true));
}
@Test
public void regexTest4() throws Exception {
RegexRequestMatcher pathMatcher = new RegexRequestMatcher("/logList.*", "GET");
MockHttpServletRequest mockRequest = new MockHttpServletRequest();
mockRequest.setScheme("http");
mockRequest.setMethod("GET");
mockRequest.setPathInfo("/logList");
Assert.assertThat(pathMatcher.matches(mockRequest), is(true));
}
要使用RegexRequestMatcher,添加屬性的要求,匹配'爲http並將其值設置爲「正則表達式」:
<http auto-config="true" request-matcher="regex">
你_sure_你訪問URL的第二次,你不已經有一個驗證會話?沒有其他解釋爲什麼你會在第一次嘗試點擊時重定向到登錄頁面,但不是第二次。你能澄清你正在採取的確切步驟嗎? – 2011-03-25 19:02:17