Usando o método setAllowedFields () no Spring

Estou usando o Spring 3.2.0. Eu registrei alguns editores de propriedade customizados para algumas necessidades básicas da seguinte forma.

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

Eu tenho muitos editores registrados até agora. Dois delesDateTimeEditor eStrictNumberFormatEditor foram personalizadas substituindo os respectivos métodos para atender às necessidades personalizadas de formato numérico eJoda-Time.

Como estou usando o Spring 3.2.0, posso aproveitar@ControllerAdvice.

Spring recomenda listar um conjunto de campos permitidos com osetAllowedFields() método para que usuários mal-intencionados não possam injetar valores em objetos vinculados.

Dedocs sobreDataBinder

Binder que permite definir valores de propriedade em um objeto de destino, incluindo suporte para validação e análise de resultados de ligação. O processo de encadernação pode ser personalizado através da especificação de campos permitidos, campos obrigatórios, editores personalizados, etc.

Observe que há possíveis implicações de segurança na falha ao definir uma matriz de campos permitidos. No caso de dados POST de formulário HTTP, por exemplo, os clientes mal-intencionados podem tentar subverter um aplicativo fornecendo valores para campos ou propriedades que não existem no formulário. Em alguns casos, isso pode levar a que dados ilegais sejam definidos em objetos de comando ou em seus objetos aninhados. Por esta razão, éaltamente recomendado para especificarallowedFields propriedade no DataBinder.

Eu tenho um grande aplicativo e, obviamente, existem milhares de campos. Especificando e listando todos eles com osetAllowedFields() é um trabalho tedioso. Além disso, de alguma forma eu preciso lembrar deles.

Alterar uma página da web para remover alguns campos ou adicionar campos adicionais, conforme necessário, requer modificar o valor do parâmetrosetAllowedFields() método para refletir essas mudanças.

Existe alguma alternativa para isso?

questionAnswers(3)

yourAnswerToTheQuestion