Vamos a ver un ejemplo de JAX RS Client Security. En el artículo anterior hemos protegido un recurso REST mediante autenticación básica . Es momento de conectarnos a él usando un cliente Java .
El primer paso es configurar las dependencias que nuestra aplicación de consola necesita usando Maven:
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>com.arquitecturajava</groupId> <artifactId>ClienteREST</artifactId> <version>0.0.1-SNAPSHOT</version> <dependencies> <dependency> <groupId>org.glassfish.jersey.core</groupId> <artifactId>jersey-client</artifactId> <version>2.25.1</version> </dependency> <dependency> <groupId>org.glassfish.jersey.media</groupId> <artifactId>jersey-media-json-jackson</artifactId> <version>2.25</version> </dependency> </dependencies> </project>
Una vez hecho esto vamos a crear el programa que se encarga de conectarse al servicio REST. Este programa incluirá una clase de negocio y un cliente.
package com.arquitecturajava.bo; import javax.xml.bind.annotation.XmlRootElement; @XmlRootElement(name="noticia") public class Noticia { private String id; private String titulo; public String getId() { return id; } public void setId(String id) { this.id = id; } public String getTitulo() { return titulo; } public void setTitulo(String descripcion) { this.titulo = descripcion; } }
package com.arquitecturajava.cliente; import java.util.ArrayList; import java.util.List; import javax.ws.rs.client.Client; import javax.ws.rs.client.ClientBuilder; import javax.ws.rs.client.WebTarget; import javax.ws.rs.core.GenericType; import javax.ws.rs.core.MediaType; import org.glassfish.jersey.client.authentication.HttpAuthenticationFeature; import com.arquitecturajava.bo.Noticia; public class Principal { public static void main(String[] args) { Client client = ClientBuilder.newClient(); WebTarget target = client.target("http://localhost:8080/WebRESTSeguridad/noticias"); GenericType<List<Noticia>> noticias = new GenericType<List<Noticia>>() { }; List<Noticia> listaNoticia = target.request(MediaType.APPLICATION_JSON).get(noticias); for (Noticia n : listaNoticia) { System.out.println(n.getId()); System.out.println(n.getTitulo()); } } }
En este caso estamos usando JAX RS y el API de cliente para acceder al servicio REST que creamos anteriormente . Ahora bien no estamos pasando ningún tipo de credencial. Por lo tanto el servicio nos devolverá una excepción de acceso no autorizado:
JAX RS Client Security
Para solventar este problema lo único que nos falta es modificar el cliente de JAX-RS y añadir la autenticación básica.
HttpAuthenticationFeature autentificacion = HttpAuthenticationFeature.basic("cecilio", "cecilio"); Client client = ClientBuilder.newClient(); client.register(autentificacion);
Acabamos de registrar el tipo de Autenticación, ahora ya no tendremos problemas y accederemos al servicio sin errores:
Nos acabamos de conectar con JAX RS Client Security. Cada framework de JAX-RS utiliza su propio sistema de autenticación en la parte cliente ya que la especificación lo deja muy abierto. En este caso hemos abordado la autenticación más básica , la cual no incluye encriptación del canal.
Otros artículos relacionados:
JAX-RS Client y Servicios REST