我有几个如下所示的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.