Java正则表达式接受URL模式中的UUID或仅数字

时间:2019-02-26 06:09:02

标签: java regex spring-boot spring-security

我在春季启动时添加了多个http安全性,并基于URL模式添加了过滤器。我有一个端点/ abc / {id},它接受​​查询参数作为id(可以是UUID或数字)。我正在尝试创建一个可以接受UUID或仅接受数字的正则表达式模式,例如http.regexpattern(“ / abc /”)。authorzerequest()。我尝试使用管道运算符(正则表达式中为OR),但在这里不起作用。 我不想添加两个不同的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 :(得分:0)

我不知道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);
}