首页 新闻 会员 周边 捐助

如何解决不明确的请求映射?

0
[已解决问题] 解决于 2021-11-10 17:34

有一个博客项目。用户可以在文章下发表评论或回复其他用户的评论。这两种操作都是发表新评论,按照REST风格,两种操作的路径都是/comment,请求方法都是POST,但两者的请求参数是不同的,发表新评论需要的参数是文章id和评论内容,回复其他评论需要的参数是被回复的评论id和评论内容。发表新评论的控制器方法的注解是

@PostMapping(path="/comment", params={"articleId","content"})

回复其他用户评论的控制器方法的注解是

@PostMapping(path="/comment", params={"content","repliedCommentId"})

一般情况下网站运行是没有问题。但如果黑客恶意攻击,向/comment路径发送包含articleId、content、repliedCommentId三个参数的Post请求,Spring框架就找不到明确匹配的控制器方法,Spring就会抛出IllegalStateException: Ambiguous handler methods...。

而IllegalStateException太普遍了,很多Spring框架的错误都会抛出这个异常,所以用全局异常处理个人觉得不太合适。

有办法解决这种不明确的请求映射吗?

Halloworlds的主页 Halloworlds | 初学一级 | 园豆:190
提问于:2021-11-10 14:50
< >
分享
最佳答案
0

提供一个思路, 弄一个中间件,在请求抵达视图函数前做入参校验;
按照你贴的代码,实际上两两组合的参数才是正常请求,应该挺好过滤的

奖励园豆:5
〆灬丶 | 老鸟四级 |园豆:2314 | 2021-11-10 15:02

你是说用拦截器吗?拦截器确实是个可行的方案

Halloworlds | 园豆:190 (初学一级) | 2021-11-10 17:04

@Halloworlds: 意思好像差不多;我用的 python

〆灬丶 | 园豆:2314 (老鸟四级) | 2021-11-10 17:17
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册