Service built to work as core microservice for Gluns-Bank project.
- Useful Links
- Brief Features Description
- Use
- Tech stack
- Architecture
- Infrastructure
- Configuration
- Flows
- Frontend: https://github.com/Kolman-Freecss/gluns-front
- Python Backend: https://github.com/shubhamsugara22/gluns-python-backend
- Swagger: http://localhost:8083/webjars/swagger-ui/index.html#/
- Keycloak: http://localhost:8080/
- Database Client (pgAdmin4): http://localhost:80/
- MySQL: http://localhost:3306/
- Security implementation using Spring Boot 3.3.5 and Keycloak with JSON Web Tokens (JWT).
- SSO (Single Sign-On) using Keycloak.
- OAuth2 Protocol.
- Check the
.launchers
folder to see the different launchers. - Run GlunsSpringApplication.run.xml to start the application. (This will start the Springboot application)
-
Build the Docker containers:
docker compose build
-
Bring up the containers in the background:
docker compose up -d
- Java 21
- Spring:
- Spring Boot 3.3.5
- Spring Actuator
- Spring Webflux
- Reactive programming. Async API to perform non-blocking operations in the main thread application.
- Used also to consume the Github API asynchrously (instead Java 11 HttpClient or OkHttp).
- Spring Boot DevTools
- To reload the application when a change is detected.
- Spring AOP
- Auxiliar Join Components to log the requests and responses.
- Auth:
- Keycloak
- JSON Web Tokens (JWT)
- Maven
- OpenAPI/Swagger docs v2
- Docker
- Docker Compose
- MySQL
- pgAdmin4
- Spring Data JPA Hibernate
- Way to interact with the database using an ORM (Hibernate) with all the entities and relationships configured.
- Microservices Architecture
- Sync communication through REST API
- Hexagonal Architecture
Diagram Flow:
- Configure Keycloak with the following settings:
- New Realm:
gluns
- Create a new Client:
gluns-back
- Client ID:
gluns-back
- Client ID:
- 2 Roles:
USER
andADMIN
- 2 Users:
user
andadmin
- Password:
password
- Map Roles to the users:
USER
andADMIN
- Password:
- New Realm:
User Chat Flow:
This work is licensed under a Creative Commons Attribution-NonCommercial-NoDerivatives 4.0 International License.