springBoot和tomcat项目解析get请求url上的小括号()报400?

新手上路,请多包涵

url上带小括号()就报400,

image.png

转义了还是不行

image.png

后台代码

    @RequestMapping(value = "/download")
    public ResponseEntity<Object> download1(@RequestParam String name, @RequestParam String type) {
        logger.info(name, type);
        return new ResponseEntity<>(HttpStatus.OK);
    }

但是如果改成pathVariable就行了

    @RequestMapping(value = "/download/{name}")
    public ResponseEntity<Object> download1(@PathVariable String name, @RequestParam String type) {
        logger.info(name, type);
        return new ResponseEntity<>(HttpStatus.OK);
    }

image.png

url上带()就报错,带[]和{}都没问题,我在前端区也发了,普遍认为是后台的问题

https://segmentfault.com/q/1010000043992007

所以问题出在哪里呢?是@RequestParam的问题吗?tomcat是springboot自带的,也没有特殊配置。

阅读 3.1k
3 个回答

貌似后台也是你写的嘛?换个方法,使用post试试?看看后台日志。你想实现get请求下载嘛》?那你使用文件id

这个问题可能是Tomcat的安全配置引起的。在Tomcat 7及以上版本里,URL中的一些字符,包括小括号(),被判定为不安全的,包含这些字符的请求会就会被拒绝,返回400错误。

你可以改一下Tomcat的配置来允许这些字符

tomcat.util.http.parser.HttpParser.requestTargetAllow=|(|)

然后,重启Tomcat来让这个配置生效。这样虽然可以,但是会有安全风险。最好别用这个小括号,你可以用的URL编码或者用其他字符代替.

自己新建的项目,测试了一下带括号木有问题
括号不需要转移,方括号和花括号需要转义
既然 400 了,那就看看浏览器控制台和后端的报错吧

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
宣传栏