This guide demonstrates how your Quarkus application can use a database and JPA 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.
The application can be started using:
mvn compile quarkus:dev
The application exposes 3 endpoints:
/api/public
/api/admin
/api/users/me
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 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 TestContainers to verify the security configuration in a JVM and native mode.
The test can be executed using:
# JVM mode
mvn test
# Native mode
mvn verify -Pnative
You can compile the application into a native binary using:
mvn clean package -Pnative
Note: You need to have a proper GraalVM configuration to build a native binary.
and run with:
./target/security-jpa-quickstart-1.0-SNAPSHOT-runner
NOTE: Don't forget to start the database.