2011-09-22 57 views
1

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

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上伪造此值。

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

回答

0

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

+0

权限检查不失败。我看到它进入并调用setDisallowedFields,但我仍然可以将该值附加到POST数据,并将其设置为POST数据中设置的任何值,即使该数据不应该被允许。编辑问题以反映使用不正确的语言。 – Scott

+1

可能是“*”可能导致问题。我的印象是所有字段默认都是允许的。如果我错了,请纠正我。 – unixorn