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:
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.
E
edumatias
OPa.
Claro.
Tem um muito simples aqui.
Esse
Passa um token no header
Pega ele na sua api rest e compara pra ver se é a mesma.
Tenta ae
F
fabricio1010
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.
//Web Service-----------------------------------------------
private List contrato;
/** * Creates a new instance of Controle */publicContratoBacking(@PathParam("ano")intano,@PathParam("mes")intmes,@HeaderParam("chave")Stringchave)throwsException{//autenticarif(!"123".equals(chave)){gerarContratos(ano,mes);}}publicvoidgerarContratos(intano,intmes)throwsException{Connectionconexao=ConnectionFactory.getConnection();PreparedStatementstmt=conexao.prepareStatement("select .....");try{gerarLista(stmt);}catch(Exceptione){thrownewException("Erro ao executar query. "+e.getMessage());}finally{ConnectionFactory.closeConnection(conexao,stmt);}}publicvoidgerarLista(PreparedStatementstmt)throwsException{ResultSetrs=stmt.executeQuery();contrato=newArrayList<Contrato>();while(rs.next()){contrato.add(newContrato(rs.getInt("id_contrato"),rs.getString("objeto"),rs.getInt("nr_contrato"),rs.getInt("ano_contrato"),rs.getInt("mes"),rs.getString("nome_razao"),rs.getFloat("vl_contrato")));}}/** * Retrieves representation of an instance of pacote.Controle * * @param token * @return an instance of java.lang.String */@GET@Produces("application/json")publicStringgetJson(){Gsongson=newGson();returngson.toJson(contrato);}
E
edumatias1 like
Opa,
Em seu client, tente desta forma:
Clientc=Client.create();WebResourcewr=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 URIMultivaluedMap<String,String>queryParams=newMultivaluedMapImpl();ClientResponseresponse=null;response=wr.queryParams(queryParams).header("Content-Type","application/json;charset=UTF-8").header("chave","123").get(ClientResponse.class);StringjsonStr=response.getEntity(String.class);
Já no seu resource, cadê as anottations? Algo assim.
edumatias, minhas anottations estão em um método que acabei não enviando. Funcionou certinho agora. Muito obrigado.
E
edumatias1 like
Show Fabricio.
Marque o comentário que resolveu o caso como Solução.
[]'s
F
fabricio1010
ApenaspreciseialterarnoClienteaformadechamaroWS:Clientc=Client.create();WebResourcewr=c.resource(“<ahref="http://XXX.XXX.X.XXX:8080/controlews/webresources/contrato/%22+exercicio+%22/">http://XXX.XXX.X.XXX:8080/controlews/webresources/contrato/"+exercicio+"/</a>”+mes); //pode usar para passar parametros. Mas no seu caso já está na URIMultivaluedMap<String,String>queryParams=newMultivaluedMapImpl();ClientResponseresponse=null;response=wr.queryParams(queryParams).header(“Content-Type”,“application/json;charset=UTF-8”).header(“chave”,“123”).get(ClientResponse.class);StringjsonStr=response.getEntity(String.class);