Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 比较两个字符串,都使用正则表达式_Java_Regex_Security_Permissions - Fatal编程技术网

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
将能够在您描述时执行此匹配伊贝德。