我使用Spring 3.2.0。 我已经注册了一些自定义属性编辑器的一些基本需求如下。
import editors.DateTimeEditor;
import editors.StrictNumberFormatEditor;
import java.math.RoundingMode;
import java.net.URL;
import java.text.DecimalFormat;
import java.text.NumberFormat;
import org.joda.time.DateTime;
import org.springframework.beans.propertyeditors.StringTrimmerEditor;
import org.springframework.beans.propertyeditors.URLEditor;
import org.springframework.web.bind.WebDataBinder;
import org.springframework.web.bind.annotation.ControllerAdvice;
import org.springframework.web.bind.annotation.InitBinder;
import org.springframework.web.context.request.WebRequest;
@ControllerAdvice
public final class GlobalDataBinder
{
@InitBinder
public void initBinder(WebDataBinder binder, WebRequest request)
{
binder.setIgnoreInvalidFields(true);
binder.setIgnoreUnknownFields(true);
//binder.setAllowedFields(someArray);
NumberFormat numberFormat=DecimalFormat.getInstance();
numberFormat.setGroupingUsed(false);
numberFormat.setMaximumFractionDigits(2);
numberFormat.setRoundingMode(RoundingMode.HALF_UP);
binder.registerCustomEditor(DateTime.class, new DateTimeEditor("MM/dd/yyyy HH:mm:ss", true));
binder.registerCustomEditor(Double.class, new StrictNumberFormatEditor(Double.class, numberFormat, true));
binder.registerCustomEditor(String.class, new StringTrimmerEditor(true));
binder.registerCustomEditor(URL.class, new URLEditor());
}
}
我至今注册这么多的编辑。 其中两个DateTimeEditor
和StrictNumberFormatEditor
已经通过覆盖相应的方法,以满足数字格式和定制需求定制乔达时间 。
由于我使用Spring 3.2.0,我可以利用的@ControllerAdvice
。
春建议列出一组与允许的领域setAllowedFields()
方法,使恶意用户不能注入值到绑定的对象。
从文档有关DataBinder
粘合剂,其允许设置属性值到目标物体上,包括支持验证和结合结果分析。 装订处理可以通过指定允许字段,所需的字段,自定义编辑器等来定制
请注意,在未按照规定允许的字段数组潜在的安全隐患。 在例如HTTP POST形式的数据的情况下,恶意客户端可以尝试通过对不窗体上存在字段或属性提供值颠覆的应用程序。 在某些情况下,这可能会导致非法数据被上命令对象或自己的嵌套对象设置。 出于这个原因,我们强烈建议指定
allowedFields
在DataBinder的属性 。
我有一个大的应用程序,显然有成千上万的领域。 指定并列出他们都与setAllowedFields()
是一个单调乏味的工作。 此外,不知何故,我需要记住他们。
更改网页删除某些字段或添加其他领域的需求再次出现需要修改的参数值setAllowedFields()
方法来反映这些变化。
是否有任何替代品吗?