gpt4 book ai didi

Spring:绑定(bind)到命令时转义输入

转载 作者:行者123 更新时间:2023-12-04 07:14:24 24 4
gpt4 key购买 nike

您如何处理希望表单中的用户输入为 htmlEscape 的情况
你绑定(bind)到一个命令对象?

我希望它自动清理输入数据,以避免遍历命令对象中的所有字段。

谢谢。

最佳答案

如果您使用的是 FormController,则可以通过覆盖 initBinder(HttpServletReques, ServletRequestDataBinder) 方法来注册新的属性编辑器。这个属性编辑器可以逃避 html、javascript 和 sql 注入(inject)。

如果您使用的是属性编辑器,则请求对象中的值将在分配给命令对象之前由编辑器处理。

当我们注册一个编辑器时,我们必须指定其值必须由编辑器处理的项目的类型。

对不起,现在我不知道该方法的语法。但我确信这就是我们实现这一目标的方式。

已编辑

我认为以下语法可以工作

在您的 Controller 中覆盖以下方法,如图所示

    @Override
protected void initBinder(HttpServletRequest request,
ServletRequestDataBinder binder) throws Exception {
super.initBinder(request, binder);

binder.registerCustomEditor(String.class,
new StringEscapeEditor(true, true, false));
}

然后创建以下属性编辑器
public class StringEscapeEditor extends PropertyEditorSupport {

private boolean escapeHTML;
private boolean escapeJavaScript;
private boolean escapeSQL;

public StringEscapeEditor() {
super();
}

public StringEscapeEditor(boolean escapeHTML, boolean escapeJavaScript,
boolean escapeSQL) {
super();
this.escapeHTML = escapeHTML;
this.escapeJavaScript = escapeJavaScript;
this.escapeSQL = escapeSQL;
}

public void setAsText(String text) {
if (text == null) {
setValue(null);
} else {
String value = text;
if (escapeHTML) {
value = StringEscapeUtils.escapeHtml(value);
}
if (escapeJavaScript) {
value = StringEscapeUtils.escapeJavaScript(value);
}
if (escapeSQL) {
value = StringEscapeUtils.escapeSql(value);
}
setValue(value);
}
}

public String getAsText() {
Object value = getValue();
return (value != null ? value.toString() : "");
}
}

希望这可以帮助你

关于Spring:绑定(bind)到命令时转义输入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1231602/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com