【发布时间】:2018-10-02 07:09:27
【问题描述】:
我正在为 Spring Boot 休息服务器配置 HttpSecurity,我需要使创建用户端点不需要身份验证。
控制器方法的映射是POST /users/{username}?action=create
我生成了以下正则表达式,并使用在线工具对其进行了测试,以确保它正确匹配:
(\/users\/)([^\/]+)(\?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 抱怨找不到身份验证对象...
【问题讨论】:
-
HttpMethod.POST = 应该是 HttpMethod.GET 吗?
-
@JoeT 肯定是 POST,请求中包含提供其他详细信息的 json 对象。
-
好的,我看到了这个“控制器方法的映射是 GET”
-
@JoeT 哦,我的错!固定
-
由于正则表达式包含在 Java 字符串中,它不必有转义反斜杠吗? @JoeT
标签: java regex spring rest spring-security