Ajudando um colega aqui no fórum, surgiu essa questão aqui : https://cursos.alura.com.br/forum/topico-bloquear-alteracao-na-data-de-cadastro-28725
No caso do amigo, quando ele estava na página de edição de um determinado registro, ele não mantinha o valor da data de cadastro do registro na página, e como ao submeter o form mandamos o objeto completo para o controller, a data de cadastro ia com valor null.
Foi sugerido para ele a solução mais obvia, criar um input hidden, com o valor da data do cadastro, obvio que essa solução funciona, pois o vraptor vai tratar de preencher a data de cadastro
<input type="hidden" name="registro.dataCadastro" value="${registro.dataCadastro}"/>
em minha opinião resolvemos um problema e criamos outro. Agora temos uma falha gravíssima de segurança. Pelo menos lá na empresa que eu trabalho, que é um tribunal, a data do cadastro de um processo por exemplo é algo muito importante, pois existem várias coisas ligadas à data do cadastro: prazos processuais, multas,etc.... logo a data de cadastro de algum registro, é algo que nunca deve mudar, mas como essa informação está em um simples hidden, qualquer criança pode ir lá pelo firebug mesmo e altarar esta data, ao submeter o form, o registro vai ser atualizado com uma outra data de cadastro. Se não me engano foi uma falha parecida com essa que certa vez derrubou o Git Hub. Parameter tampering?
oque eu sugeri para o colega foi passar normalmente o registro para o método editar, mas na verdade ele não vai editar este registro, ele vai recuperar um segundo registro pelo id passado e copiar todos os valores que vem do formulário de edição.
@Put
public void editar(Registro registro){
Registro registroToUpdate = registroDao.find(registro.getRegistroId);
registroToUpdate.setPropriedade(registro.getPropriedade());
registroToUpdate.setPropriedade2(registro.getPropriedade2());
registroDao.update(registroToUpdate);
}
Bem braçal, mas resolve. Gostaria de saber como vocês tratam esse tipo de situação, de atualizar somente os dados que possam ser atualizados visto que o padrão é enviar o objeto completo na requisição?