How do you create a JWT token in Spring Boot?
Table of Contents
Introduction
JSON Web Tokens (JWTs) are widely used for securing RESTful APIs and user authentication in modern web applications. In a Spring Boot application, you can generate JWT tokens for authenticating users and securing endpoints. JWTs are compact, URL-safe tokens that represent claims between two parties, and they are commonly used to authenticate API requests in a stateless manner.
This guide will walk you through the steps to create a JWT token in Spring Boot, explaining how to configure the JWT generation logic and integrate it into your authentication system.
Steps to Create a JWT Token in Spring Boot
1. Add Dependencies to Your **pom.xml**
First, ensure that your Spring Boot project has the necessary dependencies for security and JWT handling. You'll need spring-boot-starter-security
and a library like jjwt
for working with JWTs.
Example pom.xml
dependencies:
The jjwt
library is used here to generate and validate the JWT tokens.
2. Create a JWT Utility Class
The next step is to create a utility class that will handle the creation and parsing of JWT tokens. The utility class will use the Jwts
builder from the jjwt
library to generate a signed JWT.
Example JwtUtil.java
class:
In this class:
createJwt()
generates a JWT using theHS256
algorithm, with theusername
as the subject and an expiration time of one hour.parseJwt()
parses the JWT and extracts the claims (such as subject and expiration date).
3. Create a Login Endpoint to Generate the JWT
Now, create a login endpoint in your Spring Boot controller that will authenticate the user and return the generated JWT token. This endpoint will validate the user's credentials and, if they are correct, generate and return the JWT.
Example AuthenticationController.java
:
In this example:
- The
login
method receives aLoginRequest
containing the username and password. - If the credentials are correct, it generates a JWT token using
JwtUtil
and returns it to the client.
4. Create a LoginRequest Class
Define a LoginRequest
class to hold the login credentials received in the request body.
Example LoginRequest.java
:
5. Test the JWT Generation
Once your Spring Boot application is up and running, you can test the JWT generation by sending a POST
request to the /login
endpoint with a username
and password
in the request body.
For example, using Postman:
- URL:
http://localhost:8080/login
- Method:
POST
- Body:
{ "username": "user", "password": "password" }
If the credentials are correct, the server will respond with the generated JWT token.
6. Use the JWT for Secured Endpoints
Now that you have a working JWT generation system, you can use the JWT for securing your endpoints. This typically involves adding an authentication filter to validate the token for incoming requests.
For example, you could create a filter that checks the Authorization
header for a JWT and validates it before allowing access to secured endpoints.
Conclusion
Creating a JWT token in Spring Boot is a relatively straightforward process. By following these steps, you can implement JWT-based authentication to secure your REST APIs. The jjwt
library simplifies the process of generating and validating JWT tokens, and with Spring Boot, you can easily integrate this authentication mechanism into your application.