server.tomcat.relaxed-query-chars=[,] 似乎允许我的整个网站使用 [ 和 ],有没有



我正在将一些API请求转发到具有php后端的服务。因此,我需要能够接受[和]在我的休息资源之一。 Tomcat有一种方法可以为您的整个服务执行此操作:server.tomcat.relaxed-query-chars=[,]。 出于安全原因,我只想在 1 个特定的 api 资源上允许这些,而不是在整个服务上。 有没有办法做到这一点?

谢谢 布莱恩

正如您所观察到的,Tomcat配置选项适用于整个服务器。如果要执行特定于特定 REST 资源的操作,可以实现自己的Filter,用于检查查询字符串中除 REST 资源以外的所有 URL 的字符,您希望检查更宽松

我最终离开了server.tomcat.relaxed-query-chars=[,]。 然后,我创建了一个 RequestBodyAdviceAdapter ControllerAdvice。 如果它不是我的特定资源,我添加了逻辑来验证它是否会为 [ 和 ] 抛出java.lang.IllegalArgumentException: Invalid character found in the request target. The valid characters are defined in RFC 7230 and RFC 3986,仍然为所有其他资源抛出。

@ControllerAdvice
MyControllerAdvice extends org.springframework.web.servlet.mvc.method.annotation.RequestBodyAdviceAdapter{
@Override
public Object supports(){
my logic here
}
@Override
public HttpInputMessage beforeBodyRead(){
my other logic here
}
}

您需要添加特定于 url 的它

server.tomcat.relaxed-path-chars=[,]

最新更新