Java HttpSecurity正则表达式匹配器未按预期工作

Java HttpSecurity正则表达式匹配器未按预期工作,java,regex,spring,rest,spring-security,Java,Regex,Spring,Rest,Spring Security,我正在为Spring Boot rest服务器配置HttpSecurity,我需要使创建用户端点不需要身份验证 控制器方法的映射是POST/users/{username}?action=create 我生成了以下正则表达式,并使用在线工具进行了测试,以确保其正确匹配: \/用户\/[^\/]+\?操作=创建 我对用户名的唯一规则是它们不能包含/,所以我相信正则表达式可以满足这一点 但是,尽管在httpsecurity配置中添加了以下内容: .authorizeRequests() .regex

我正在为Spring Boot rest服务器配置HttpSecurity,我需要使创建用户端点不需要身份验证

控制器方法的映射是POST/users/{username}?action=create

我生成了以下正则表达式,并使用在线工具进行了测试,以确保其正确匹配:

\/用户\/[^\/]+\?操作=创建

我对用户名的唯一规则是它们不能包含/,所以我相信正则表达式可以满足这一点

但是,尽管在httpsecurity配置中添加了以下内容:

.authorizeRequests()
.regexMatchers(HttpMethod.POST,"(\\/users\\/)([^\\/]+)(\\?action=create)")
.permitAll()
我仍然无法到达终点,也不确定原因

谢谢

更新:

显然,除非我将WebSecurity对象配置为完全忽略它,否则将应用我的自定义筛选器,如下所示:

@Override
public void configure(WebSecurity web) throws Exception {
    web.ignoring().antMatchers("/v2/api-docs", "/configuration/ui", "/swagger-resources/**", "/configuration/**", "/swagger-ui.html", "/webjars/**")
    .and().ignoring().regexMatchers(HttpMethod.POST, "(\\/users\\/)([^\\/]+)(\\?action=create)");
}

但是现在spring抱怨找不到身份验证对象…

我最初的解决方案是授权已通过身份验证的请求,以下内容使得所有请求都可以匿名或不匿名

将此添加到自定义WebSecurity配置适配器

@Override
public void configure(WebSecurity web) throws Exception {
    web.ignoring().antMatchers("/v2/api-docs", "/configuration/ui", "/swagger-resources/**", "/configuration/**", "/swagger-ui.html", "/webjars/**")
    .and().ignoring().regexMatchers(HttpMethod.POST, "(\\/users\\/)([^\\/]+)(\\?action=create)");
}
为了清楚起见,这是它应用于的控制器方法:

@RequestMapping(value = "/users/{username}",params = {"action="+Action.CREATE}, method = RequestMethod.POST)
@ResponseStatus(HttpStatus.CREATED)
public UserModel createUser(@PathVariable(value="username") String username, @RequestBody UserModel user) {

    user.setUsername(username);
    return userService.createUser(user);

}

HttpMethod.POST=应该是HttpMethod.GET吗?@JoeT肯定是POST,请求中包含了一个提供其他详细信息的json对象。好的,我看到了,控制器方法的映射是GET@JoeT哦,糟糕!Fixed由于正则表达式包含一个Java字符串,它不必有转义反斜杠吗@约特