Quarkus集成Keycloak:含路径参数的permit配置失效求助
问题解决:Quarkus OIDC权限配置中路径参数无法生效的原因及方案
Quarkus的quarkus.http.auth.permission.*系列配置采用Ant风格路径匹配规则,并不支持JAX-RS里{param}这种路径参数语法。你写的{restaurantId}会被当作路径的固定字符串部分去匹配,自然无法命中实际请求,而*是Ant风格里匹配单个路径段的通配符,所以能正常生效。
可行解决方案
方案1:用Ant风格通配符匹配任意路径段
如果只是需要匹配/restaurant/menu/后跟随任意单个路径段(对应你的restaurantId参数),直接将配置改为:
quarkus.http.auth.permission.public-api.paths=/restaurant/menu/* quarkus.http.auth.permission.public-api.policy=permit
这个配置的效果和你期望的{restaurantId}完全一致,*会匹配该位置的任意单个路径内容(比如数字、字符串形式的ID)。
方案2:正则匹配实现精确校验
如果需要对restaurantId的格式做限制(比如仅允许数字),可以开启正则匹配模式:
- 先开启正则支持:
quarkus.http.auth.permission.public-api.regex=true
- 配置正则路径:
quarkus.http.auth.permission.public-api.paths=^/restaurant/menu/[0-9]+$
这样只会匹配restaurantId为纯数字的请求。
关键说明
Quarkus的权限匹配是在请求到达业务端点前执行的,仅解析原始URL路径,不会关联代码中定义的JAX-RS端点路径参数占位符,因此不能用{param}语法来定义权限路径规则。
内容的提问来源于stack exchange,提问作者Altafhusen Makandar
相关产品推荐
相关产品推荐

