Pessoal, criei um web service no modelo REST e Json usando o GET. Preciso autenticar com usuário e senha para que qualquer um não possa acessar os dados. Li várias matérias mas não cheguei em um resultado. Vi algo que deveria passar o usuário e senha no Header mas não entendi como. No cliente quando chamo o web service uso o código abaixo:
Client c = Client.create();
WebResource wr = c.resource("http://XXX.XXX.X.XXX:8080/controlews/webresources/contrato/"+exercicio+"/"+mes);
String json = wr.get(String.class);]
Gson gson = new Gson();
return gson.fromJson(json, new TypeToken<List<Contrato>>() {
}.getType());
Boa tarde edumatias, obrigado por responder. Li o tutorial que me passou, ví o video e olhei o projeto. Aparentemente é bem complexo essa implentação e não consegui identificar uma demonstração pratica de como enviar e capturar o login. Você já fez essa autenticação ? Estava pensando em algo mais simples, apenas passar o parâmetro de usuário e senha para o web service de forma oculta e validar no próprio web service.
edumatias, Bom dia. O Parâmetro " wr.header(“chave”,“123”)"; que estou enviando não chega no WS “@HeaderParam(“chave”) String chave”. Tentei usar o método POST aí não chega nem a carregar os dados.Tem alguma sugestão ? Desde já obrigado.
Client c = Client.create();
WebResource wr = c.resource("http://XXX.XXX.X.XXX:8080/controlews/webresources/contrato/"+exercicio+"/"+mes);
//pode usar para passar parametros. Mas no seu caso já está na URI
MultivaluedMap<String, String> queryParams = new MultivaluedMapImpl();
ClientResponse response = null;
response = wr.queryParams(queryParams).header("Content-Type", "application/json;charset=UTF-8")
.header("chave", "123")
.get(ClientResponse.class);
String jsonStr = response.getEntity(String.class);
Já no seu resource, cadê as anottations? Algo assim.
@GET
@Produces(javax.ws.rs.core.MediaType.APPLICATION_JSON + "; charset=UTF-8")
@Path("/autores/{exercicio}/{mes}")
public String ContratoBacking(@PathParam("ano") int ano, @PathParam("mes") int mes, @HeaderParam("chave") String chave) throws Exception {
//autenticar
if(!"123".equals(chave)){
gerarContratos(ano, mes);
}
return "retorna algo";
}
Apenas precisei alterar no Cliente a forma de chamar o WS:
Client c = Client.create();
WebResource wr = c.resource(“http://XXX.XXX.X.XXX:8080/controlews/webresources/contrato/"+exercicio+"/”+mes); //pode usar para passar parametros. Mas no seu caso já está na URI
MultivaluedMap<String, String> queryParams = new MultivaluedMapImpl();
ClientResponse response = null;
response = wr.queryParams(queryParams).header(“Content-Type”, “application/json;charset=UTF-8”)
.header(“chave”, “123”)
.get(ClientResponse.class);
String jsonStr = response.getEntity(String.class);