boa tarde galera,
estou seguindo a excelente apostila da caelum do curso fj-28 e no capítulo 10 - REST eu fiquei com a seguinte dúvida:
@Get @Path("/produtos/{id}")
public Produto edita(Long id) {
return dao.carrega(id);
}
Qnd colocamos a anotação @Path ele muda a forma de exibição no browser, e nesse exemplo no caso do método edita qnd clico no link minha url ficou dessa forma http://localhost:8080/vraptor-blank-project/produtos/10
No entanto, não gostaria que aparecesse o meu id (10), pois se eu digito outro número ele me traz os dados do id digitado. Como poderia esconder isso? Colocar como post acredito que não dá pois no html <a href="<c:url value="/produtos/${produto.id}"/>"> ele pega já via get.
Alguém poderia me ajudar?
muito obrigado.
Bem, via GET não há como esconder parâmetros, e caso você coloque essa URL na mão você DEVE conseguir exatamente o mesmo resultado, é justamente essa a ideia do método GET.
Para ocultar da URL os parâmetros use o método POST, mas para assegurar que apenas usuários autorizados possam ver determinados dados utilize algum recurso à parte, de segurança.
[quote=salmaox]Alguma dica?
Obrigado.[/quote]
Cara expor ids de objetos em url é quase inevitavel numa aplicação web . Uma solução é voce travar em domínio isso (via regra de negocio)
Ou outra solução que eu usava é gerar um hash de uma palavra_chave_secreta + chave_unica_url + id entao mesmo que o cara chute um id na url vai faltar saber o hash que voce compara
Trocando em miudos :
O cara veria uma url do tipo http://localhost:8080/vraptor-blank-project/produtos/10/a23ko8873kkdo8873 (que seria a combinacao de palavra_chave_secreta + chave_unica_url + id )
no seu controller
@Path("/produtos/{produto.id}/{hash}")
public void edit(Produto produto,String hash){
//Faz os ifs da vida
if(!stringToMd5("MINHA_CHAVE-/produtos/edit-"+produto.getId()).equals(hash)) {
redirect......
} else {
executa sua logica
}
}
entao por mais que ele tente chutar um id ele nunca vai saber gerar o hash de comparacao e quando voce recuperar voce vai conseguir compara pois conhece todos os dados !!!
ótima ideia! Pois não acho seguro exibir o identificador na URL. Dessa forma consigo embaralhar um pouco as coisas.
Obrigado.
Abraço