我有几个如下所示的SprigMVC方法,返回ModelAndView或Responsebody.当用户向这些URL发出缺少所需参数的请求时,他们自然会收到消息“必需字符串参数’id’不存在”.
从安全角度来看,我想隐藏用户的详细描述消息.因此,黑客不容易知道缺少的参数,并且在没有任何描述的情况下会得到400错误.这可能是通过弹簧配置/ Spring Security实现的,或者我必须手动重构我的所有方法以某种方式返回自定义消息.
@RequestMapping(value = "/payment",method = RequestMethod.GET)
public ModelAndView getReponse(@RequestParam(value = "id",required = true)) {
return model;
}
@RequestMapping(value = "/status",method = RequestMethod.GET)
public @ResponseBody String getStatus(@RequestParam(value = "id",required = true) String id) {
return "string";
}
最佳答案
你真正需要的是MissingServletRequestParameterException的全局处理程序,当缺少请求参数时Spring会抛出它.解决此问题的最简单方法是使用ControllerAdvice来处理所有控制器.
import org.springframework.web.bind.MissingServletRequestParameterException;
@ControllerAdvice
class MissingServletRequestParameterExceptionHandler {
@ExceptionHandler(MissingServletRequestParameterException.class)
@ResponseBody
@ResponseStatus(HttpStatus.BAD_REQUEST)
public String handleMissingParameter() {
return "Your custom result";
}
}
如果要仅为特定控制器隐藏缺少的参数消息,只需将handleMissingParameter方法移动到此控制器,而不创建ControllerAdvice.
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。