@InitBinder无法使用值方法名称

时间:2018-06-25 07:40:45

标签: java spring fortify

如何仅将init活页夹应用于方法?我进行了很多搜索以找到答案。根据{{​​3}},@InitBinder中的值是应该使用此init-binder方法的命令/表单属性和/或请求参数的名称。我只想将模型字段列入特定处理程序方法的黑名单。以下是我的代码。

@InitBinder("saveCustomerProfile")
  public void initBinder(WebDataBinder binder) 
  binder.setDisallowedFields(new String[]{"cbr1"});
}

以下是我的Handler方法签名。

@RequestMapping(method= RequestMethod.POST, value="/saveCustomerInfo.htm")
public ModelAndView saveCustomerProfile( @ModelAttribute @Valid CustomerProfile customerProfile, BindingResult result, HttpServletRequest request)throws Exception{
String[] suppressedFields = result.getSuppressedFields();
         if (suppressedFields.length > 0) { throw new Exception("You've attempted to bind fields that aren't allowed by @InitBinder: "+ StringUtils.arrayToCommaDelimitedString(suppressedFields));  
}}

当我删除@Initbinder'值'时,不允许的字段正在设置,并引发异常。即,它在整个控制器中全局工作。 如何限制它仅用于特定方法?当/saveCustomerInfo.htm处理程序方法正在调用时,我想禁止customerProfile模型中的字段'cbr1'字段(仅适用于此方法)。 我引用了docs来实现此目的,但无法正常工作。有人可以帮忙吗?

1 个答案:

答案 0 :(得分:1)

@InitBinder使用命令/表单属性的名称。它不适用于方法名称。在您的情况下,应提供@ModelAttribute(“ saveCustomerProfile”),它将与特定命令绑定。

公共ModelAndView saveCustomerProfile(@ModelAttribute(“ saveCustomerProfile”)@Valid CustomerProfile customerProfile,BindingResult结果,HttpServletRequest请求)引发异常{