En el articulo anterior de como Crear Tokens con Microprofile JWT y JDBC Realm, nosotros conseguimos tener un proyecto que nos provea de tokens para nuestros usuarios y roles de nuestra BD.
Quedo pendiente crear un cliente que utilice estos tokens y permita hacer uso de las APIS que exponga este cliente.
Proyecto Cliente
Este es un tipico proyecto JakartaEE con Microprofile 3.2. En esta oportunidad el proyecto usará DeltaSpike que en el mundo Spring vendría a ser como tu Spring Data, Nimbus Jose JWT para trabajar con Json Web Tokens (JWT), Microprofile Extension para Open API, finalmente Jakarta XML Binding.
DeltaSpike
Este es un módulo usado para simplificar la implementación del patrón repository. Es muy similar a Spring Data. Para consultar una base de datos, nosotros necesitamos definir una declaración de método sin implementación con @Query. La implementación será realizada para nosotros por la extensión CDI.
El módulo requiere un EntityManager para ser inyectado por CDI. Para conseguir esto usamos un productor CDI.
Lo anterior asume que tenemos una unidad de persistencia con nombre "concentrador_pu" definido en el archivo persistence.xml:
Si han leido nuestro anterior articulo reconoceran el jdbc/ecommerce que se creo para poder conectarnos a nuestra BD en PostgreSQL.
La estrategia de transacción a utilizar es:
Existen 4 estrategias:
- BeanManagedUserTransactionStrategy
- ResourceLocalTransactionStrategy
- ContainerManagedTransactionStrategy
- EnvironmentAwareTransactionStrategy
Todas implementan org.apache.deltaspike.jpa.spi.transaction.TransactionStrategy. Como yo voy a usar JTA tengo que habilitar una estrategia como BeanManagedUserTransactionStrategy en el archivo beans.xml acorde a la información en https://deltaspike.apache.org/documentation/jpa.html.
Existe tambien el apache-deltaspike.properties donde tambien estableceremos la misma estrategia:
El resultado final es:
Implementando Repositorio
Con lo anterior ya podemos implementar el patrón repository. Les parece conocida esta implementación?
Cors Filter
Como nuestros API Rest serán consumidos por una aplicación SPA hecha con angular o móvil hecha con Flutter, vamos a definir un cors filter.
Controladoras
Ahora toca el momento de definir nuestras controladoras.
Cómo se puede apreciar para que podamos ejecutar el método login, se necesita estar autenticado
y tener o el rol USUARIO o el rol ADMIN.
@POST
@RolesAllowed({ RolesEnum.Constants.ADMIN_VALUE,
RolesEnum.Constants.USUARIO_VALUE})
Microprofile JWT
Microprofile nos permite hacer la validación anterior de una forma muy simple. Para eso necesitamos 2 cosas:
1. En el archivo payara-mp-jwt.properties colocar el accepted.issuer :
2. Colocar la llave pública que permitirá validar los tokens JWT generados por el proyecto microprofile-jwt-provider que vimos en el artículo anterior.
Postman
Para poder probar nuestra API, tenemos primero que obtener un token con el proyecto proveedor de tokens JWT visto en el primer artículo.
Declaramos ese token en la sección Authorization - Type: Bearer Token:
Ya con esa configuración podemos probar el API - Login sin problemas:
Enjoy!
Joe
0 comentarios:
Publicar un comentario