Java регулярное выражение для принятия либо UUID или только чисел в шаблоне URL - PullRequest
0 голосов
/ 26 февраля 2019

Я добавляю множественную защиту http при весенней загрузке и добавляю фильтры на основе шаблона URL. У меня есть конечная точка / abc / {id}, которая принимает параметр запроса в качестве идентификатора, который может быть либо UUID, либо цифрой. Я пытаюсь создатьшаблон регулярного выражения, который может принимать либо UUID, либо только числа, например http.regexpattern («/ abc /«). authorzerequest ().Я пытался с оператором трубы (или в регулярном выражении), но он не работает здесь.Я не хочу добавлять две разные настройки безопасности http: одну для uuid, другую для чисел.Каким может быть шаблон регулярного выражения, который может работать в http?Вот код с оператором регулярного выражения OR (Pipe |), который не работает "

protected void configure(HttpSecurity http) throws Exception {
        http.csrf().disable();
        http.regexMatcher("/abc/([0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12})|([0-9]+$)").authorizeRequests()
                .anyRequest().authenticated().and().addFilterBefore(new CustomFilter(), BasicAuthenticationFilter.class);

        http.addFilterAfter(new EnvironmentFilter(jwtTokenUtility), BasicAuthenticationFilter.class);

}

1 Ответ

0 голосов
/ 26 февраля 2019

Я не знаю, есть ли у Spring собственный вкус регулярных выражений, но если вы можете узнать, какой это тип регулярных выражений, вы можете использовать https://regex101.com/, который является очень хорошей средой тестирования для регулярных выражений.

Не зная Spring, у Java есть собственный Regex-аромат, который содержит оператор канала в виде OR и который, насколько мне известно, работает хорошо.Вот вам пример:

// example input
String input0 = "MyPatteRn"; // matches
String input1 = "myPattern"; // matches
String input2 = "MypaTTern"; // no match

Pattern pattern = Pattern.compile("my|My(Patt|PaTT)e(?:r|R)n");
Matcher matcher = pattern.matcher(inputSequence);
if (matcher.matched()) {
    String patt = matcher.group(1);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...