有一个博客项目。用户可以在文章下发表评论或回复其他用户的评论。这两种操作都是发表新评论,按照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: 意思好像差不多;我用的 python