Jakarta ee Spring安全拦截url与通配符不匹配
我尝试使用spring security为我的应用程序实现安全性。 我使用Jakarta ee Spring安全拦截url与通配符不匹配,jakarta-ee,spring-security,Jakarta Ee,Spring Security,我尝试使用spring security为我的应用程序实现安全性。 我使用截取url截取页面,例如: <http auto-config='true'> <intercept-url pattern="/logList*" access="ROLE_ADMIN" /> <form-login login-page="/login.jsp" authentication-failure-url="/login.jsp?error=true" />
截取url
截取页面,例如:
<http auto-config='true'>
<intercept-url pattern="/logList*" access="ROLE_ADMIN" />
<form-login login-page="/login.jsp" authentication-failure-url="/login.jsp?error=true" />
<logout />
<remember-me/>
</http>
我第一次尝试使用url:localhost/projectname/logList访问匿名用户的日志
并且页面会自动重定向到登录页面
但是当我尝试使用urllocalhost/projectname/logList/
访问日志页时,匿名用户可以访问日志页
当模式
/logList*
正确时,为什么会发生这种情况?模式=“/logList/**”是否会产生影响?默认情况下,使用AntPathRequestMatcher。如果你再加一个图案
那么它就可以工作了
以下是测试(请注意,对于RegexRequestMatcher,相同的模式适用于/logList/和/logList):
要使用RegexRequestMatcher,请将属性“request matcher”添加到http并将其值设置为“regex”:
我尝试使用**模式,但没有区别。您确定第二次访问URL时,您还没有经过身份验证的会话吗?没有其他解释解释为什么第一次尝试点击登录页面时会被重定向到该页面,但第二次不会。你能澄清一下你正在采取的具体步骤吗?请注意,“请求匹配器”需要Spring Sec 3.1+。低于此版本的版本中的等效项是“path type”。我使用spring sec 3.0使用path type=“regex”,但出现了错误NullPointerExecption。我还在下载spring第3.1节+
@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));
}