Spring: экранирование ввода при привязке к команде

Как вы справляетесь в случае, когда вы хотите вводимых пользователем данных из формы htmlEscape бы, когда вы привязываетесь к объекту command?

Я хочу, чтобы это автоматически санировало входные данные, чтобы избежать запуска через все поля в объекте command.

спасибо.

2 ответов


при использовании FormController можно зарегистрировать новый редактор свойств, переопределив метод initBinder(HttpServletReques, ServletRequestDataBinder). Этот редактор свойств может избежать инъекции html, javascript и sql.

Если вы используете редактор свойств, значения из объекта запроса будут обработаны редактором перед назначением объекту команды.

при регистрации редактора мы должны указать тип элемента, значения которого имеют для обработки редактором.

извините, теперь я не синтаксис метода. Но я уверен, что именно так мы этого добились.

редактировать

Я думаю, что следующий синтаксис может работать

в вашем контроллере переопределите следующий метод, как показано

    @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() : "");
    }
}

надеется, что это поможет вам


можно использовать @Valid и @SafeHtml из Hibernate validator. См. подробности вhttps://stackoverflow.com/a/40644276/548473