比较两个字符串,都用正则表达式

时间:2019-02-16 00:24:00

标签: java regex security permissions

我正在我的应用程序上实现安全系统,但在检查用户x是否具有权限y时遇到了一些问题。

好吧,让我们将其上下文化: 例如:我的应用具有以下权限:

  • cmd.a
  • cmd.b
  • api.a
  • api.b

管理员具有以下可用权限:*.a*代表所有内容,因此分别为cmd.aapi.a),普通用户拥有*.bcmd.bapi.b)。

因此,我必须比较用户是否有cmd.a。 那么,如何比较*.acmd.a? 然后将*.acmd.*cmd.acmd.b)进行比较(必须为假,因为*.a仅包含cmd.a和{{1 }})?

老实说,我不知道从哪里开始,因为我不知道运行时的现有权限(api.acmd.acmd.bapi.a),我只需拥有用户所拥有的权限(例如api.b和一个比较权限(*.a就会出现)(例如*cmd.*等)。

我真的不知道我是否正确解释了我想要的东西。如何比较这些正则表达式?

1 个答案:

答案 0 :(得分:0)

这些不是正则表达式。像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功能!