Java 比较两个字符串,都使用正则表达式
我正在我的应用程序上实现一个安全系统,我在检查用户Java 比较两个字符串,都使用正则表达式,java,regex,security,permissions,Java,Regex,Security,Permissions,我正在我的应用程序上实现一个安全系统,我在检查用户x是否有权限y时遇到了一些问题 好吧,让我们来分析一下: 例如:我的应用程序具有以下权限: cmd.a cmd.b api.a api.b 管理员拥有以下可用权限:*.a(*意味着一切,所以它是cmd.a和api.a),普通用户拥有*.b(cmd.b和api.b) 因此,我必须比较用户是否有cmd.a。 那么,我如何比较*.a和cmd.a? 比较*.a和cmd.(cmd.a,cmd.b)(必须为false,因为*.a只包括cmd.a和api.
x
是否有权限y
时遇到了一些问题
好吧,让我们来分析一下:
例如:我的应用程序具有以下权限:
cmd.a
cmd.b
api.a
api.b
*.a
(*
意味着一切,所以它是cmd.a
和api.a
),普通用户拥有*.b
(cmd.b
和api.b
)
因此,我必须比较用户是否有cmd.a
。
那么,我如何比较*.a
和cmd.a
?
比较*.a
和cmd.
(cmd.a
,cmd.b
)(必须为false,因为*.a
只包括cmd.a
和api.a
)
老实说,我不知道从哪里开始,因为我不知道运行时的现有权限(cmd.a
,cmd.b
,api.a
,api.b
),我只知道用户拥有的权限(例如*.a
)和权限(*
)可以进行比较(例如cmd.*
或cmd.foo
等)
我真的不知道我是否正确地解释了我想要的。我如何比较这些正则表达式?这些不是正则表达式。类似于
cmd\\\\\\\\*
的东西将是正则表达式(与cmd.a匹配,与api.a不匹配)
首先写下这个方法:
public static boolean matches(String permission, String config) {
// you write it!
}
其作用如下:
public static void test() {
assertTrue(matches("cmd.a", "cmd.*"));
assertFalse(matches("cmd.a", "api.*"));
assertTrue(matches("cmd.b", "*.b"));
assertFalse(matches("cmd.b", "*.a"));
}
一旦你有了它,剩下的应该很简单。我不认为你应该使用正则表达式来实现匹配,但是如果你真的想的话,你可以。但是,如果你想的话,一定要使用Pattern.quote功能!这些不是正则表达式。类似于
cmd\\\\\*
的东西应该是正则表达式(与cmd.a匹配,与api.a不匹配)
首先写下这个方法:
public static boolean matches(String permission, String config) {
// you write it!
}
其作用如下:
public static void test() {
assertTrue(matches("cmd.a", "cmd.*"));
assertFalse(matches("cmd.a", "api.*"));
assertTrue(matches("cmd.b", "*.b"));
assertFalse(matches("cmd.b", "*.a"));
}
一旦你有了它,剩下的应该很简单。我不认为你应该使用正则表达式来实现匹配,但是如果你真的想,你可以。但是,如果你使用了Pattern.quote功能,请确保你使用了Pattern.quote功能!你尝试了什么?你将regex列为问题,但没有包含任何代码。请尝试查找regex教程。下面的模式
*。使用正则表达式库编译时,a
将能够执行您描述的匹配。您尝试了什么?您将正则表达式列为问题,但没有包含任何代码。尝试查找正则表达式教程。使用正则表达式库编译时,模式*。a
将能够在您描述时执行此匹配伊贝德。