Uh oh!
There was an error while loading.Please reload this page.
- Notifications
You must be signed in to change notification settings - Fork58
The goal of this project is to implement an application called order-app to manage orders. For it, we will implement a back-end Spring Boot application called order-api and a font-end React application called order-ui. Besides, we will use JWT Authentication to secure both applications.
ivangfr/springboot-react-jwt-token
Folders and files
| Name | Name | Last commit message | Last commit date | |
|---|---|---|---|---|
Repository files navigation
The goal of this project is to implement an application calledorder-app to manage orders. For it, we will implement a back-endSpring Boot application calledorder-api and a font-endReact application calledorder-ui. Besides, we will useJWT Authentication to secure both applications.
Onivangfr.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.
- [Medium]Implementing A Full Stack Web App Using Spring-Boot and React
- [Medium]Implementing Social Login in a Spring Boot and React App
- [Medium]Building a Web Chat with Social Login using Spring Boot: Introduction
- [Medium]Building a Single Spring Boot App with Keycloak or Okta as IdP: Introduction
Spring BootWeb Java backend application that exposes a Rest API to create, retrieve, and delete orders. If a user has theADMINrole, he/she can also retrieve information of other users or delete them.The application's secured endpoints can only be accessed if a valid JWT access token is provided.
order-apistores its data inPostgresdatabase.order-apihas the following endpoints:Endpoint Secured Roles POST /auth/authenticate -d {"username","password"}No POST /auth/signup -d {"username","password","name","email"}No GET /public/numberOfUsersNo GET /public/numberOfOrdersNo GET /api/users/meYes ADMIN,USERGET /api/usersYes ADMINGET /api/users/{username}Yes ADMINDELETE /api/users/{username}Yes ADMINGET /api/orders [?text]Yes ADMINPOST /api/orders -d {"description"}Yes ADMIN,USERDELETE /api/orders/{id}Yes ADMINReactfrontend application where a user with roleUSERcan create an order and retrieve a specific order. On the other hand, a user with roleADMINas access to all secured endpoints.In order to access the application, a
useroradminmust log in using his/herusernameandpassword. All the requests coming fromorder-uito secured endpoints inorder-apiinclude the JWT access token. This token is generated when theuseroradminlogs in.order-uiusesSemantic UI Reactas a CSS-styled framework.
In a terminal, make sure you are inside the
springboot-react-jwt-tokenroot folder;Run the following command to start Docker Compose containers:
docker compose up -d
order-api
Open a terminal and navigate to the
springboot-react-jwt-token/order-apifolder;Run the following
Mavencommand to start the application:./mvnw clean spring-boot:run
order-ui
Open another terminal and navigate to the
springboot-react-jwt-token/order-uifolder;Run the command below if you are running the application for the first time:
npm install
Run the
npmcommand below to start the application:npm start
| Application | URL | Credentials |
|---|---|---|
| order-api | http://localhost:8080/swagger-ui.html | |
| order-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 accesshttp://localhost:8080/swagger-ui.html. All endpoints with the lock sign are secured. In order to access them, you need a valid JWT access token;
Click
POST /auth/authenticateand then, clickTry it outbutton;Provide the
usercredentialsusernameandpassword:{"password":"user","username":"user" }Click the
Executebutton. It should return something like:Code: 200{ "accessToken": "eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzUxMiJ9..." }Note 1: You can use the
admincredentials to access more secured endpoints.Note 2: The token will expire in10 minutes.
Copy the
accessTokenvalue (without the double quotes);Click the
Authorizebutton at the top of the page;In
Valueinput field, paste the copied token;Click the
Authorizebutton and then, click theClosebutton;To create an order, click
POST /api/ordersand then, click theTry it outbutton;Provide the
descriptionof the order:{"description":"Buy two iPhones" }Click the
Executebutton. It should return something like:Code: 200{ "id": "718c9f40-5c06-4571-bc3e-3f888c52eff2", "description": "Buy two iPhones", "user": { "username": "user" }, "createdAt": "..."}
Manual Endpoints Test using curl
Open a terminal;
Call
GET /public/numberOfUsers:curl -i localhost:8080/public/numberOfUsers
It should return:
HTTP/1.1 2002Call
GET /api/orderswithout JWT access token:curl -i localhost:8080/api/orders
As for this endpoint a valid JWT access token is required, it should return:
HTTP/1.1 401Call
POST /auth/authenticateto get theadminJWT access token:ADMIN_ACCESS_TOKEN="$(curl -s -X POST http://localhost:8080/auth/authenticate \ -H'Content-Type: application/json' \ -d'{"username": "admin", "password": "admin"}'| jq -r .accessToken)"echo$ADMIN_ACCESS_TOKEN
Call
GET /api/ordersagain, now with theadminJWT access token:curl -i -H"Authorization: Bearer$ADMIN_ACCESS_TOKEN" localhost:8080/api/ordersIt should return an empty array or an array with orders:
HTTP/1.1 200[ ... ]Call
GET /api/users/meto get more information about theadmin:curl -i -H"Authorization: Bearer$ADMIN_ACCESS_TOKEN" localhost:8080/api/users/meIt should return:
HTTP/1.1 200{ "id": 1, "username": "admin", "name": "Admin", "email": "admin@mycompany.com", "role": "ADMIN", "orders": []}
Automatic Endpoints Test
Open a terminal and make sure you are in the
springboot-react-jwt-tokenroot folder;Run the following script:
./order-api/test-endpoints.sh
It should return something like the output below, where it shows the http code for different requests:
POST auth/authenticate======================admin access token------------------eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzUxMiJ9.eyJleHAiOjE1ODY2MjM1MjksImlhdCI6MTU4Nj..._ha2pM4LSSG3_d4exgAuser access token-----------------eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzUxMiJ9.eyJleHAiOjE1ODY2MjM1MjksImlhdCIyOSwian...Y3z9uwhuW_nwaGX3cc5APOST auth/signup================user2 access token------------------eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzUxMiJ9.eyJleHAiOjE1ODY2MjM1MjksImanRpIjoiYTMw...KvhQbsMGAlFov1Q480qgAuthorization============= Endpoints | without token | user token | admin token |------------------------- + ------------- + ----------- + ------------ | GET public/numberOfUsers | 200 | 200 | 200 |GET public/numberOfOrders | 200 | 200 | 200 |......................... + ............. + ........... + ............ | GET /api/users/me | 401 | 200 | 200 | GET /api/users | 401 | 403 | 200 | GET /api/users/user2 | 401 | 403 | 200 | DELETE /api/users/user2 | 401 | 403 | 200 |......................... + ............. + ........... + ............ | GET /api/orders | 401 | 403 | 200 | POST /api/orders | 401 | 201 | 201 | DELETE /api/orders/{id} | 401 | 403 | 200 |------------------------------------------------------------------------ [200] Success - [201] Created - [401] Unauthorized - [403] Forbidden
Postgres
dockerexec -it postgres psql -U postgres -d orderdb\dt
jwt.io
Withjwt.io, you can input the JWT token, and the online tool decodes the token, showing its header and payload.
To stop
order-apiandorder-ui, go to the terminals where they are running and pressCtrl+C;To stop and remove Docker Compose containers, network, and volumes, go to a terminal and, inside the
springboot-react-jwt-tokenroot folder, run the command below:docker compose down -v
In a terminal, make sure you are in the
springboot-react-jwt-token/order-uifolder;Run the following commands:
npm upgradenpm i -g npm-check-updatesncu -unpm install
About
The goal of this project is to implement an application called order-app to manage orders. For it, we will implement a back-end Spring Boot application called order-api and a font-end React application called order-ui. Besides, we will use JWT Authentication to secure both applications.
Topics
Resources
Uh oh!
There was an error while loading.Please reload this page.
Stars
Watchers
Forks
Releases
Sponsor this project
Uh oh!
There was an error while loading.Please reload this page.
Packages0
Uh oh!
There was an error while loading.Please reload this page.


