2017-08-28 1067 views
0

我正在使用來自Deadbolt的@Pattern註解驗證java類。如果這些字符串中的任何一個出現,我想給出訪問權限:'TM_TASK'或'TM_CHECKLIST'。現在我對如何在@Pattern中提供這些字符串有點困惑,所以如果字符串匹配這兩個字符串中的任何一個,它就會提供訪問權限。我也開放使用正則表達式(儘管我對他們是新手),關於如何使用正則表達式使用正則表達式驗證它是否是這兩個字符串中的任何一個('TM_TASK'或'TM_CHECKLIST'),而不是任何其他無效字符串。在Java中使用@Pattern註解驗證多個字符串的控制器類

例如

@Api(value = "/tasks") 
@Pattern(value = "^[a-zA-Z0-9_]*$", patternType = PatternType.REGEX) 
public class TaskController extends BaseController { 

    private static Logger.ALogger log = Logger.of(TaskController.class); 
    private TaskService taskService; 
    private FormFactory formFactory; 
} 
+0

有人有什麼解決辦法嗎? –

回答

0

您可以使用(TM_TASK|TM_CHECKLIST)的標準正則表達式來執行此操作。

@Api(value = "/tasks") 
@Pattern(value = "^(TM_TASK|TM_CHECKLIST)$", patternType = PatternType.REGEX) 
public class TaskController extends BaseController { 

    private static Logger.ALogger log = Logger.of(TaskController.class); 
    private TaskService taskService; 
    private FormFactory formFactory; 
} 
+0

沒有正則表達式不起作用。即使用戶具有「TM_CHECKLIST」權限,它也無法訪問控制器方法(即可訪問)。 「TM_TASK」發生同樣的情況。可能是@Pattern不驗證這樣的表達式。其他解決方案? –

+0

看看[這個例子](https://github.com/schaloner/deadbolt-2-java-examples/blob/master/app/controllers/PatternController.java#L44)。最可能的解釋是你從'Subject#getPermissions()'返回的權限與你的正則表達式不匹配。在'be.objectify.deadbolt.java.ConstraintLogic#pattern'中設置一個斷點來查看到底發生了什麼。 –

+0

雅...現在它的工作。實際上已經忘記添加註釋中的模式與模式類型。 –