Spring Boot server.tomcat.relaxed-query-chars=[,]似乎允许对我的整个站点执行[ and ],有没有办法对特定的API资源执行此操作?

pgx2nnw8  于 2022-12-13  发布在  Spring
关注(0)|答案(3)|浏览(582)

我正在转发一些API请求到一个有php后端的服务。因此我需要能够接受[ and ] on我的一个rest资源。Tomcat有一种方法可以为你的整个服务做到这一点:server.tomcat.relaxed-query-chars=[,].出于安全考虑,我只想在一个特定的API资源上允许这些操作,而不是在整个服务上。有没有办法实现这一点?
谢谢,布莱恩

kqqjbcuj

kqqjbcuj1#

正如您所观察到的,Tomcat配置选项适用于整个服务器。如果您想做一些特定于特定REST资源的事情,您可以实现自己的Filter,它检查查询字符串中所有URL的字符,而不是您希望检查更宽松的REST资源的URL。

hrysbysz

hrysbysz2#

最后我离开了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
    }

}
gopyfrb3

gopyfrb33#

您需要添加特定于url的

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

相关问题