Spring SecurityFilterChain正则匹配OAuth2保护指定端点问题
Spring Security OAuth2资源服务器端点正则匹配解决方案
需求明确
需为Spring Security的SecurityFilterChain配置正则规则,仅对以下端点触发OAuth2令牌校验:
GET /rest/file/{name}/{guid}
同时排除另外两个端点的校验要求:GET /rest/file/task/{guid}GET /rest/file/{guid}
原代码问题分析
你之前的正则写法存在两处关键错误:
- 正则边界符
^、$位置错误:将正则语法符号写进了路径分隔符中,实际路径不存在这些符号,导致无法匹配。 - GUID正则自带
^和$:拼接后会要求路径中间出现边界符,完全不符合真实路径结构,最终触发403(目标端点未被正确匹配到校验规则,默认拦截逻辑生效)。
解决方案
根据你提出的两种思路,分别提供可直接使用的正则配置:
思路1:匹配{name}不为"task"且后续是合法GUID的路径
这是最简洁的实现方式,核心逻辑为:匹配三段结构的路径(/rest/file/xxx/xxx),其中第二段不是"task",第三段符合GUID格式。
// 定义GUID正则(去掉边界符,用于嵌入完整路径正则) private static final String REGEX_GUID = "[{]?[0-9a-fA-F]{8}-(?:[0-9a-fA-F]{4}-){3}[0-9a-fA-F]{12}[}]?"; // 受保护路径的完整正则 private static final String PROTECTED_PATH_REGEX = "^/rest/file/(?!task$)[^/]+/" + REGEX_GUID + "$"; // 配置SecurityFilterChain @Bean public SecurityFilterChain securityFilterChain(HttpSecurity http) throws Exception { http .authorizeHttpRequests(auth -> auth // 对目标端点要求认证 .regexMatchers(HttpMethod.GET, PROTECTED_PATH_REGEX).authenticated() // 放行另外两个端点 .regexMatchers(HttpMethod.GET, "/rest/file/task/.*", "/rest/file/" + REGEX_GUID).permitAll() // 其他请求默认处理(可根据需求调整) .anyRequest().denyAll() ) .oauth2ResourceServer(oauth2 -> oauth2.jwt(Customizer.withDefaults())); return http.build(); }
思路2:匹配{name}不为"task"且{name}不符合GUID格式的路径
如果需要额外确保{name}本身不是GUID格式(避免和第三个端点混淆),可在正则中添加对{name}的负向预查:
private static final String REGEX_GUID = "[{]?[0-9a-fA-F]{8}-(?:[0-9a-fA-F]{4}-){3}[0-9a-fA-F]{12}[}]?"; // 增加对name不是GUID的校验 private static final String PROTECTED_PATH_REGEX = "^/rest/file/(?!task$)(?!%s$)[^/]+/%s$".formatted(REGEX_GUID, REGEX_GUID); // SecurityFilterChain配置同思路1
正则规则说明
^/rest/file/:匹配路径的固定开头(?!task$):负向预查,确保第二段路径({name})不是"task"[^/]+:匹配任意非斜杠字符(即{name}的内容)(?!%s$)(思路2):额外确保{name}本身不符合GUID格式REGEX_GUID:匹配标准格式的GUID,支持带大括号或不带的写法$:匹配路径结尾,确保是完整的三段结构
验证示例
- 触发校验的路径:
/rest/file/aaaaa/123e4567-e89b-12d3-a456-426614174000 - 直接放行的路径:
/rest/file/task/123e4567-e89b-12d3-a456-426614174000、/rest/file/123e4567-e89b-12d3-a456-426614174000
内容的提问来源于stack exchange,提问作者Mr P
相关产品推荐
相关产品推荐

