Parametro em todas as rotas

32 views
Skip to first unread message

Ivo Sestren Junior

unread,
Apr 24, 2015, 3:53:02 PM4/24/15
to caelum-...@googlegroups.com
Boa tarde.

Estou precisando receber um parametro em todas as rotas (quer dizer, quase todas, depois trato com alguma annotation).
Este parametro é um token de acesso ao serviço Rest.
Mas os serviços tem acessos via GET, POST, DELETE, etc.

Tem uma maneira facil de implementar isto para não precisar colocar este parametro em todas as rotas?

Tratar em um Intercept, mas que lá no controller não precise definir o token como parametro da url ou do post, etc?

Eldio Santos Jr.

unread,
Apr 24, 2015, 5:01:12 PM4/24/15
to caelum-...@googlegroups.com
Ivo, normalmente quando tenho que tratar um algo dessa forma prefiro usar um interceptor que valida isso antes mesmo de chegar no controller e caso a validação não funcione (token inválido) retorno um erro...

Qual a sua dúvida sobre essa abordagem?


--
Você recebeu essa mensagem porque está inscrito no grupo "caelum-vraptor" dos Grupos do Google.
Para cancelar inscrição nesse grupo e parar de receber e-mails dele, envie um e-mail para caelum-vrapto...@googlegroups.com.
Para postar nesse grupo, envie um e-mail para caelum-...@googlegroups.com.
Acesse esse grupo em http://groups.google.com/group/caelum-vraptor.
Para mais opções, acesse https://groups.google.com/d/optout.



--
Eldio Santos Junior
Tel.: (21) 98884-3757
Skype: eldiojr
Twitter: @eldius
Página pessoal: http://eldiosantos.net
                        http://eldiosantos.net/sobre/ 
Email/GTalk: eldio...@gmail.com

Ivo Sestren Junior

unread,
Apr 24, 2015, 5:41:02 PM4/24/15
to caelum-...@googlegroups.com

Minha duvida seria como passar sempre este token. Via parametro na URL? Via cookies?

Para ser tratando em todas as rotas @Get, @Post, @Delete.

Para que este token não interfira no meu controller. Para não precisar definilo nos parametros da url para o controller.

Fábio Franco da Silva

unread,
Apr 24, 2015, 5:46:06 PM4/24/15
to caelum-...@googlegroups.com

Utilize o header do httpe no seu interceptor vc faz a validação do token.

Lucas Cavalcanti

unread,
Apr 24, 2015, 10:07:09 PM4/24/15
to caelum-vraptor
O jeito padrão é usar um header pra fazer isso. De preferência o Authorization que já é parte da especificação

[]'s
Lucas Cavalcanti
@lucascs

Marcos Peron

unread,
Apr 28, 2015, 2:26:45 PM4/28/15
to caelum-...@googlegroups.com
Bacana, essa era minha dúvida também..

Alguém tem algum exemplo simples?

Obrigado

Fabio Ebner

unread,
Apr 28, 2015, 2:30:30 PM4/28/15
to caelum-...@googlegroups.com
isso nao funcionaria??


@Path(value = "/bla/{teste}")
@Controller
public class classe {
....

Marcos Peron

unread,
Apr 28, 2015, 2:43:18 PM4/28/15
to caelum-...@googlegroups.com
Veja, acredito que o problema enfrentado pelo IVO, que é o mesmo que o que sempre enfrento é passar esse parâmetro para as URLs (view) sem precisar adicionar em cada link. 

A unica solução que eu consegui foi extender o LinkToHandler para adicionar parâmetros fixos nas URLs geradas por ele.

tem outra solução?

marcos filho

unread,
Apr 29, 2015, 8:54:22 AM4/29/15
to caelum-...@googlegroups.com
Acho mais viável isso vir via http header (o cliente seta isso) 

Ex basicão só para contextualizar mesmo o que importa é add o header:

URL myURL = new URL(serviceURL);
HttpURLConnection myURLConnection = (HttpURLConnection)myURL.openConnection();
String userCredentials = "username:password";
String basicAuth = "Basic " + new String(new Base64().encode(userCredentials.getBytes())); //onde o cliente define o token
myURLConnection.setRequestProperty ("Authorization", basicAuth);
myURLConnection.setRequestMethod("POST");
myURLConnection.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");
myURLConnection.setRequestProperty("Content-Length", "" + Integer.toString(postData.getBytes().length));
myURLConnection.setRequestProperty("Content-Language", "en-US");
myURLConnection.setUseCaches(false);
myURLConnection.setDoInput(true);
myURLConnection.setDoOutput(true);


e em um interceptor verifica se esse campo do header possui valor(token), se possuir ele efetua a validação, caso a validação ocorra com sucesso, permite o acesso aos serviços, caso contrário pode retornar um reponse error. Dessa maneira não há necessidade de alterar nada em nenhum controller/method seu, caso você queira, você ainda pode especificar isso para um único controller ou para todos os controllers. Normalmente utilizo essa abordagem para serviços de webservice soap com um handler, mas esse meu handler eu valido pelos campos do http header. Acho que dá para levar a mesma ideia para os serviços rest.

Enfim, espero que a ideia possa ajudar, e desculpem os erros de digitação.
Reply all
Reply to author
Forward
0 new messages