Spring InitBinder

时间:2011-09-22 21:32:55

标签: java spring spring-mvc

我在Spring MVC中设置initBinder时遇到了一些麻烦。我有一个ModelAttribute,它有一个有时会显示的字段。

public class Model {
  private String strVal;
  private int intVal;
  private boolean boolVal; // Only shows in certain situations
}

如何正确设置此initBinder?这就是我所拥有的,但每当我修改帖子数据时,无论我说不允许,我都能修改这个boolVal。我假设我的麻烦是我不能采取我想要的捷径。

@InitBinder
public void initBinder(WebDataBinder binder) {
  binder.setIgnoreUnknownFields(true);
  if (binder.objectName() == MODEL) {
    binder.setAllowedFields("*");
    if (!somePermissionChecks()) {
      binder.setDisallowedFields("boolVal");
    }
  }
}

权限检查返回false,因此调用setDisallowedFields。问题是我仍然可以通过添加输入或更改另一个字段的名称或将其附加到POST数据来伪造UI上的这个值。

有没有快速的方法来做到这一点,而不必手动列出所有属性?

1 个答案:

答案 0 :(得分:0)

在绑定程序初始化期间权限检查是否失败?您是否在没有binder.setAllowedFields("*");声明的情况下尝试过?