View all files | ||||
The goal of this project is to implement an application called book-app to manage books. For it, we will implement a back-end Spring Boot application called book-api and a front-end React application called book-ui. Besides, we will use Basic Authentication to secure both applications.
On ivangfr.github.io, I have compiled my Proof-of-Concepts (PoCs) and articles. You can easily search for the technology you are interested in by using the filter. Who knows, perhaps I have already implemented a PoC or written an article about what you are looking for.
Spring Boot Web Java backend application that exposes a Rest API to create, retrieve and delete books. If a user has ADMIN role he/she can also retrieve information of other users or delete them.
The application's secured endpoints can only be accessed if a user has valid credentials (username and password) and has authorization roles for it.
book-api stores its data in a Postgres database.
book-api has the following endpoints:
| POST /auth/authenticate -d {"username","password"} | No | |
| POST /auth/signup -d {"username","password","name","email"} | No | |
| GET /public/numberOfUsers | No | |
| GET /public/numberOfBooks | No | |
| GET /api/users/me | Yes | ADMIN, USER |
| GET /api/users | Yes | ADMIN |
| GET /api/users/{username} | Yes | ADMIN |
| DELETE /api/users/{username} | Yes | ADMIN |
| GET /api/books [?text] | Yes | ADMIN, USER |
| POST /api/books -d {"isbn","title"} | Yes | ADMIN |
| DELETE /api/books/{isbn} | Yes | ADMIN |
React frontend application where a user with role USER can retrieve the information of a specific book or a list of books. On the other hand, a user with role ADMIN has access to all secured endpoints.
To log in, a user or admin must provide valid username and password credentials. book-ui communicates with book-api to get books and users data.
book-ui uses Mantine as a UI component library, with Tabler Icons for icons.
In a terminal, make sure you are inside the springboot-react-basic-auth root folder;
Run the following command to start docker compose containers:
book-api
Open a terminal and navigate to the springboot-react-basic-auth/book-api folder;
Run the following Maven command to start the application:
book-ui
Open another terminal and navigate to the springboot-react-basic-auth/book-ui folder;
Run the command below if you are running the application for the first time:
Run the npm command below to start the application:
| book-api | http://localhost:8080/swagger-ui.html | |
| book-ui | http://localhost:3000 | admin/admin, user/user or signing up a new user |
Note: the credentials shown in the table are the ones already pre-defined. You can signup new users.
Manual Endpoints Test using Swagger
Open a browser and access http://localhost:8080/swagger-ui.html. All endpoints with the lock sign are secured. In order to access them, you need a valid username and password credentials;
Click Authorize button (white/green one, almost at the top of the page, right side);
In the Basic authentication form that will open, provide the admin credentials (admin/admin) or user ones (user/user). Then, click Authorize and, finally, click Close button;
Make some calls to the endpoints.
Manual Endpoints Test using curl
Open a terminal:
Call GET /public/numberOfBooks:
It should return
Call GET /api/books without credentials:
As this endpoint requires authentication, it should return:
Call again GET /api/books but now with user credentials:
It should return:
Call POST /api/books with user credentials:
As user doesn't have the role ADMIN, it should return:
Call POST /api/books with admin credentials:
It should return:
Automatic Endpoints Test
Open a terminal and make sure you are in the springboot-react-basic-auth root folder;
Run the following script:
It should return something like the output below, where it shows the http code for different requests:
To stop book-api and book-ui, go to the terminals where they are running and press Ctrl+C;
To stop and remove Docker Compose containers, network, and volumes, go to a terminal and, inside the springboot-react-basic-auth root folder, run the command below:
book-api
Open a terminal and navigate to the springboot-react-basic-auth/book-api folder;
Run all tests:
book-ui
Open a terminal and navigate to the springboot-react-basic-auth/book-ui folder;
Run all tests:
In a terminal, make sure you are in the springboot-react-basic-auth/book-ui folder;
Run the following commands:
Spring Boot module (book-api): Code is formatted using Spotless with Google Java Format.
To check or apply formatting, make sure you are inside the module folder and run the following command:
Check formatting:
Auto-fix formatting:
React module (book-ui): Code is formatted using Prettier with rules aligned to the project's style guide (2-space indentation, single quotes, no trailing semicolons). ESLint conflicts are resolved via eslint-config-prettier. Configuration is defined in .prettierrc (formatting rules) and .editorconfig (editor consistency).
To check or apply formatting, make sure you are inside the book-ui folder and run the following commands:
Check formatting:
Auto-fix formatting:
[Medium]: How I Reduce GIF and Screenshot Sizes for My Technical Articles on macOS
If you find this useful, consider buying me a coffee:
This project is licensed under the MIT License.