gpt4 book ai didi

java - 使用 Shiro 的 Servlet 身份验证,是否可以过滤具有某些关键字的 URL?

转载 作者:行者123 更新时间:2023-11-28 22:54:04 25 4
gpt4 key购买 nike

我有一个使用 shiro 身份验证在 tomcat 中运行的 servlet 应用程序。我的 servlet URL 如下所示

 http://builds/Query/User?which_option=ui_data&which_out=json

上述 URL 中的“which_option” 可以取各种值。我只想验证 shiro 中具有 "which_option=ui_data" 的那些 URL。我在 shiro.ini 的 URL 过滤中尝试了以下使用正则表达式的方法。

[urls]
/Query/User*ui_data* = authcBuilds

但这行不通。 Shiro URL configuration页面提到 URL 表达式必须是 URL_Ant_Path_ExpressionANT path expression似乎只申请匹配文件名,而不是 URL 字符串的一部分。

有没有其他方法可以做到这一点(URL 正则表达式匹配)?否则我必须将我的代码转移到另一个 servlet,比如

http://builds/Query/UI_Data

并在shiro.ini中使用如下认证

[urls]
/Query/UI_Data* = authcBuilds

最佳答案

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 以检查查询参数。

关于java - 使用 Shiro 的 Servlet 身份验证,是否可以过滤具有某些关键字的 URL?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32304186/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com