JAX-WS Service_ Autenticação Web Service usando Java

4
09/10/13 JAX-WS Service: Autenticação Web Service usando Java www.devmedia.com.br/jax-ws-service-autenticacao-web-service-usando-java/28751 1/4 Gostei (0) (0) JAX-WS Service: Autenticação Web Service usando Java Veja neste artigo como adicionar os elementos de segurança para o JAX-WS Service. Imagine um cenário onde você desenvolveu um Web Service e o publicou no servidor. Agora todos podem acessá-lo, mas você queria apenas que clientes especificamente registrados o acessassem, que apenas pessoas autorizadas possa acessar o Web Service. Uma maneira de fazer isso é usando o procedimento de autenticação em JAX-WS. Isto pode ser alcançado pelo cliente fornecendo um "username" e um "password", anexado no cabeçalho da solicitação SOAP e enviá-lo para o servidor. O servidor, em seguida, analisa o documento SOAP e busca um "username" e "password" no cabeçalho. Em seguida, o servidor verifica se o "username" e "password" são válidos, comparando-os com um banco de dados (ou qualquer outro método preferencial) de usuários autorizados. Supondo que o leitor deste artigo tenha conhecimentos básicos sobre SOAP e Web Services. Etapa 1: Criar um programa simples em Java (Service) Primeiro, vamos definir o serviço para ser implementado. Listagem 1: HelloWorld.java package com.devmedia.ws; public interface HelloWorld { String getHelloWorldMes 2 6

Transcript of JAX-WS Service_ Autenticação Web Service usando Java

Page 1: JAX-WS Service_ Autenticação Web Service usando Java

09/10/13 JAX-WS Service: Autenticação Web Service usando Java

www.devmedia.com.br/jax-ws-service-autenticacao-web-service-usando-java/28751 1/4

Gostei (0) (0)

JAX-WS Service:Autenticação WebService usando JavaVeja neste artigo como adicionar os elementos de segurança para oJAX-WS Service.

Imagine um cenário onde você desenvolveu um Web Service e o publicou no servidor. Agora todos

podem acessá-lo, mas você queria apenas que clientes especificamente registrados o acessassem, que

apenas pessoas autorizadas possa acessar o Web Service. Uma maneira de fazer isso é usando o

procedimento de autenticação em JAX-WS. Isto pode ser alcançado pelo cliente fornecendo um

"username" e um "password", anexado no cabeçalho da solicitação SOAP e enviá-lo para o servidor.

O servidor, em seguida, analisa o documento SOAP e busca um "username" e "password" no

cabeçalho. Em seguida, o servidor verifica se o "username" e "password" são válidos, comparando-os

com um banco de dados (ou qualquer outro método preferencial) de usuários autorizados.

Supondo que o leitor deste artigo tenha conhecimentos básicos sobre SOAP e Web Services.

Etapa 1: Criar um programa simples em Java (Service)

Primeiro, vamos definir o serviço para ser implementado.

Listagem 1: HelloWorld.java

package com.devmedia.ws; public interface HelloWorld { String getHelloWorldMessage();}

26

Page 2: JAX-WS Service_ Autenticação Web Service usando Java

09/10/13 JAX-WS Service: Autenticação Web Service usando Java

www.devmedia.com.br/jax-ws-service-autenticacao-web-service-usando-java/28751 2/4

A implementação é a seguinte:

Listagem 2: HelloWorldImpl.java

package com.devmedia.ws; public class HelloWorldImpl implements HelloWorld { @Override public String getHelloWorldMessage(String myName){ return("Hello "+myName+" to JAX WS world"); }}

Passo 2: Modificar o serviço como Web Service

Modificar o serviço criado na seção anterior para o serviço da Web e também verificar a autenticação do

usuário como mostra abaixo:

A visão de interface HelloWorld.java é a seguinte:

Listagem 3: HelloWorld.java updated

package com.devmedia.ws; import javax.jws.WebMethod;import javax.jws.WebService;import javax.jws.soap.SOAPBinding;import javax.jws.soap.SOAPBinding.Style; @WebService@SOAPBinding(style = Style.RPC)public interface HelloWorld { @WebMethod String getHelloWorldMessage(); }

No Web Service do lado do servidor, se a solicitação parâmetros de cabeçalho via WebServiceContext.

Implementação revisada HelloWorldImpl.java é a seguinte:

Listagem 4: HelloWorldImpl.java updated

package com.devmedia.ws; import java.util.List;import java.util.Map; import javax.annotation.Resource;import javax.jws.WebService;import javax.xml.ws.WebServiceContext;import javax.xml.ws.handler.MessageContext; @WebService(endpointInterface = "com.devmedia.ws.HelloWorld")public class HelloWorldImpl implements HelloWorld { @Resource WebServiceContext wsctx; @Override public String getHelloWorldMessage() { MessageContext mctx = wsctx.getMessageContext(); // Use the request headers to get the details Map http_headers = (Map) mctx.get( MessageContext.HTTP_REQUEST_HEADERS); List<String> userList = (List) http_headers.get("Username"); List<String> passList = (List) http_headers.get("Password"); String username = ""; String password = ""; if (userList != null) { username = userList.get(0); } if (passList != null) { password = passList.get(0); } if (username.equals("DevUser") && password.equals("password")) { return "Hello " + username + " to world of Jax WS - Valid User!"; } else { return " User No Valid!"; } } }

Se você notar no código acima temos detalhes como nome de usuário e senha do cabeçalho da

solicitação. Verifique se o nome de usuário é "DevUser" e se a senha é "password", em seguida

retorna uma mensagem de autenticação bem-sucedida caso contrário retorno a mensagem de falha de

autenticação.

Passo 3: Adding WS exposed code

Publicar a localidade Web Service criando o Endpoint publisher e expor o serviço no servidor.

Endpoint.publish("http://localhost:9000/ws/hello", new HelloWorldImpl());

Esta linha aqui começa uma leve http server endpoint que implanta seu web service e começa a aceitar

solicitações de entrada.

O método a ser publicado usa dois parâmetros:

Endpoint URL String

Page 3: JAX-WS Service_ Autenticação Web Service usando Java

09/10/13 JAX-WS Service: Autenticação Web Service usando Java

www.devmedia.com.br/jax-ws-service-autenticacao-web-service-usando-java/28751 3/4

Implementador do objeto, neste caso a classe de implementação HelloWorld, que é exposta como uma

web service do endpoint identificado pela URL mencionada no parâmetro abaixo:

Listagem 5: HelloWorldPublisher.java

package com.devmedia.endpoint; import javax.xml.ws.Endpoint;import com.mrbool.ws.HelloWorldImpl; public class HelloWorldPublisher { public static void main(String[] args){ Endpoint.publish( "http://localhost:9000/ws/hello", new HelloWorldImpl()); System.out.println( "\nWeb service published @ http://localhost:9000/ws/hello"); System.out.println("You may call the web service now"); }}

Passo 4: Criar um Cliente Web Service

No código do cliente, coloque o "username" e "password" no cabeçalho de solicitação ao enviá-lo para

a autenticação. Os comentários sobre cada passo no código explica o client code.

O arquivo do cliente, HelloWorldClient.java é o seguinte:

Listagem 6: HelloWorldClient.java

package com.devmedia.client; import java.net.URL;import java.util.Collections;import java.util.HashMap;import java.util.List;import java.util.Map; import javax.xml.namespace.QName;import javax.xml.ws.BindingProvider;import javax.xml.ws.Service;import javax.xml.ws.handler.MessageContext; import com.devmedia.ws.HelloWorld; public class HelloWorldClient { private static final String WS_URL = "http://localhost:9000/ws/hello?wsdl"; public static void main(String[] args) throws Exception { URL url = new URL(WS_URL); QName qname = new QName( "http://ws.devmedia.com/", "HelloWorldImplService"); Service service = Service.create(url, qname); HelloWorld hello = service.getPort(HelloWorld.class); // The BindingProvider interface provides //access to the protocol binding and // to the associated context objects //for request and response message processing. BindingProvider provider = (BindingProvider) hello; Map<String, Object> req_ctx = provider.getRequestContext(); req_ctx.put( BindingProvider.ENDPOINT_ADDRESS_PROPERTY, WS_URL); Map<String, List<String>> headers = new HashMap<String, List<String>>(); headers.put("Username", Collections.singletonList("DevUser")); headers.put("Password", Collections.singletonList("password")); req_ctx.put(MessageContext.HTTP_REQUEST_HEADERS, headers); System.out.println(hello.getHelloWorldMessage()); }}

Passo 5: Compile e execute

Compile os arquivos de serviço, edite-os e execute-os. Crie os arquivos em pacotes.

compileandrun.batdir /b /s *.java >> files.txtjavac @files.txtjava com.devmedia.endpoint.HelloWorldPublisher

Coloque os arquivos em pacotes no diretório com.devmedia.

A primeira linha do lote lista todos os arquivos java em subpastas e grava o caminho completo dos

arquivos de "files.txt".

Segunda linha emite o comando compile para todos os arquivos java listados no arquivo "files.txt"

Terceira linha executa a classe HelloWorldPublisher.

Execute o arquivo de lote e a saída (System.out present na classe HelloWorldPublisher) como se

segue:

Web service published @ http://localhost:9000/ws/hello

Agora você pode chamar o Web Service.

Passo 6: Test WS Client

Gravar um arquivo de lote para testar o client.

Page 4: JAX-WS Service_ Autenticação Web Service usando Java

09/10/13 JAX-WS Service: Autenticação Web Service usando Java

www.devmedia.com.br/jax-ws-service-autenticacao-web-service-usando-java/28751 4/4

executeClient.batjava com.devmedia.client.HelloWorldClientPAUSE

Executar o executeClient.bat e a saída é a seguinte:

Hello DevUser to world of Jax WS - Valid User!

Passo 7: Generate the WSDL

Testar o Web Service acessando o WSDL (Web Service Definition Language) gerador de documentos

via URL http://localhost:9000/ws/hello?wsdl". Esta WSDL descreve em detalhes a API do Web Service.

Como é language-neutral, client pode ser construído em qualquer linguagem de programação.

Conclusão

Neste artigo vimos como fornecer uma autenticação básica para um Web Service usando a linguagem

de programação Java.

Artigo traduzido e originalmente publicado em: http://mrbool.com/web-service-authentication-using-java/28