This guide demonstrates how your Quarkus application can use a database, Hibernate Reactive and Quarkus Security Jakarta Persistence Reactive extension to store your user identities.
You need a database to store the user identities/roles. Here, we are using PostgreSQL.
To ease the setup, we have provided a docker-compose.yml
file which start a PostgreSQL container, bind the network ports
and finally creates the users and their credentials by importing the import.sql
file.
The database can be started using:
docker-compose up
Once the database is up you can start your Quarkus application.
Note you do not need to start the database when running your application in dev mode or testing. It will be started automatically as a Dev Service.
The application can be started using:
mvn compile quarkus:dev
The application exposes 4 endpoints:
/api/public
/api/admin
/api/users/me
/api/users
You can try these endpoints with an http client (curl
, HTTPie
, etc).
Here you have some examples to check the security configuration:
curl -i -X POST -u admin:admin -d user http://localhost:8080/api/users # create 'user'
curl -i -X GET http://localhost:8080/api/public # 'public'
curl -i -X GET http://localhost:8080/api/admin # unauthorized
curl -i -X GET -u admin:admin http://localhost:8080/api/admin # 'admin'
curl -i -X GET http://localhost:8080/api/users/me # 'unauthorized'
curl -i -X GET -u user:user http://localhost:8080/api/users/me # 'user'
NOTE: Stop the database using: docker-compose down; docker-compose rm
We have provided integration tests based on Dev Services for PostgreSQL to verify the security configuration in JVM and native modes. The test and dev modes containers will be launched automatically because all the PostgreSQL configuration properties are only enabled in production (prod
) mode.
The test can be executed using:
# JVM mode
mvn test
# Native mode
mvn verify -Dnative
You can compile the application into a native binary using:
mvn clean package -Dnative
Note: You need to have a proper GraalVM configuration to build a native binary.
and run with:
./target/security-jpa-reactive-quickstart-1.0.0-SNAPSHOT-runner
NOTE: Don't forget to start the database.