我有一个使用shiro身份验证在tomcat中运行的servlet应用程序。 我的servlet URL看起来像这样
http://builds/Query/User?which_option=ui_data&which_out=json
上述网址中的 “which_option” 可以采用各种值。 我只想在shiro中验证那些 “which_option = ui_data” 的网址。 我在shiro.ini中使用URL过滤中的正则表达式尝试了以下内容。
[urls]
/Query/User*ui_data* = authcBuilds
但这不起作用。 Shiro URL configuration页面提到网址表达式必须为 URL_Ant_Path_Expression 。 ANT path expression似乎仅适用于匹配文件名,而不是URL字符串的一部分。
还有其他方法(URL正则表达式匹配)吗?否则我必须将我的代码转移到另一个servlet,如
http://builds/Query/UI_Data
并在shiro.ini中使用以下身份验证
[urls]
/Query/UI_Data* = authcBuilds
答案 0 :(得分:1)
Shiro的AntMacher org.apache.shiro.util.AntMatcher的实现确实与您的URL匹配。
import org.apache.shiro.util.AntPathMatcher;
import org.junit.Test;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertTrue;
public class AntMatcherTest {
@Test
public void match() {
final AntPathMatcher matcher = new AntPathMatcher();
assertTrue(matcher.match("/Query/User*ui_data*", "/Query/User?which_option=ui_data"));
}
@Test
public void noMatch() {
final AntPathMatcher matcher = new AntPathMatcher();
assertFalse(matcher.match("/Query/User*ui_data*", "/Query/User?which_option="));
}
}
Shiro的javax.servlet.http.HttpServletRequest实现将URL拆分为多个部分:所有但查询字符串都会进入匹配中使用的URL。因此它不会匹配查询参数。
编写自己的FormAuthenticationFilter,您将可以访问ServletRequest来检查查询参数。