-
Notifications
You must be signed in to change notification settings - Fork 1
JWT Spring Boot Starter — Complete GitHub Wiki
jwt-spring-boot-starter is a reusable, production-oriented JWT authentication starter built for Spring Boot applications.
The project was designed to eliminate repetitive JWT boilerplate code that developers typically write in almost every backend application.
Instead of manually configuring:
- JWT utilities
- token validation
- token parsing
- authentication filters
- Spring Security configuration
- SecurityContext integration
- bean registration
- request interception
Developers can simply:
- Add the dependency
- Configure JWT properties
- Start using JWT authentication immediately
The starter automatically configures:
- JwtService
- JwtAuthenticationFilter
- SecurityFilterChain
- JWT validation flow
- Spring Security integration
with minimal setup.
JWT authentication is one of the most common authentication mechanisms used in modern backend systems.
However, implementing JWT repeatedly across projects creates a large amount of duplicated infrastructure code.
Typical JWT setup usually requires:
- JwtUtil class
- token validation logic
- claims extraction
- expiration handling
- authentication filters
- Bearer token parsing
- Spring Security integration
- SecurityContext configuration
- route protection setup
- excluded route management
This project was created to transform JWT authentication into a reusable plug-and-play dependency.
The goal is:
Reduce authentication boilerplate while maintaining flexibility and extensibility.
Incoming Request
↓
JwtAuthenticationFilter
↓
Extract Bearer Token
↓
Validate JWT
↓
Extract Claims
↓
Create Authentication Object
↓
SecurityContextHolder
↓
Protected Controller Access
application.yml
↓
JwtConfigurationProperties
↓
JwtAutoConfiguration
↓
JwtSecurityConfiguration
↓
JwtAuthenticationFilter
↓
JwtService
The project currently consists of:
Framework-independent JWT utility engine.
Responsibilities:
- token generation
- token validation
- claims extraction
- refresh token support
- token type handling
Spring Boot integration layer.
Responsibilities:
- auto configuration
- Spring Security integration
- JWT filter registration
- route protection
- request authentication
- SecurityContext integration
- Access token generation
- Refresh token generation
- Claims extraction
- Type-safe claim parsing
- Token validation
- Subject extraction
- Access/refresh token detection
- Automatic JWT filter registration
- Stateless authentication
- Bearer token parsing
- SecurityContext integration
- Request authentication
- Protected route handling
- Public route support
- Plug-and-play setup
- Zero manual bean registration
- Auto configuration
- Extensible architecture
- Override support
- Lightweight design
<repositories>
<repository>
<id>github</id>
<url>https://maven.pkg.github.com/smitroy4/jwt-spring-boot-starter</url>
</repository>
</repositories><dependency>
<groupId>com.smit</groupId>
<artifactId>jwt-spring-boot-starter</artifactId>
<version>1.0.2</version>
</dependency>jwt:
secret-key: mysupersecretkeymysupersecretkey123456
access-token-expiration: 600000
refresh-token-expiration: 604800000| Property | Description |
|---|---|
| jwt.secret-key | Secret key used for JWT signing |
| jwt.access-token-expiration | Access token expiration time in milliseconds |
| jwt.refresh-token-expiration | Refresh token expiration time in milliseconds |
@RestController
@RequiredArgsConstructor
public class AuthController {
private final JwtService jwtService;
@GetMapping("/auth/token")
public String token() {
return jwtService.generateAccessToken(
"101",
Map.of("email", "admin@test.com", "role", "ADMIN")
);
}
}@RestController
public class UserController {
@GetMapping("/user")
public String user(Authentication authentication) {
return "Authenticated User: " + authentication.getName();
}
}GET /auth/tokenResponse:
eyJhbGciOiJIUzI1NiJ9...
GET /user
Authorization: Bearer YOUR_TOKENResponse:
Authenticated User: 101
JwtAuthenticationFilter is responsible for:
- intercepting requests
- extracting Bearer tokens
- validating JWTs
- creating Authentication objects
- storing authentication in SecurityContext
The filter extends:
OncePerRequestFilterwhich guarantees:
One filter execution per request.
After successful validation:
SecurityContextHolder.getContext().setAuthentication(authentication);is executed.
This allows authenticated user information to become available globally inside the Spring Security ecosystem.
The project uses Spring Boot's:
META-INF/spring/AutoConfiguration.imports
mechanism.
This enables:
- automatic configuration loading
- no component scanning requirements
- starter-based architecture
Registers:
- JwtService
- JwtConfigurationProperties
- JwtAuthenticationFilter
Registers:
- SecurityFilterChain
- JWT filter integration
- protected route handling
Current implementation supports:
.requestMatchers("/auth/**").permitAll()which allows:
- login routes
- token generation endpoints
- public APIs
without requiring authentication.
All non-public routes automatically require JWT authentication.
Example:
.anyRequest().authenticated()The starter automatically provides:
JwtServicethrough Spring's dependency injection container.
No manual bean registration is required.
The starter is designed around:
@ConditionalOnMissingBeanThis enables applications to override default implementations.
Applications can provide:
@Bean
public JwtService jwtService() {
return new CustomJwtService();
}The starter automatically backs off.
Applications can fully customize authentication behavior.
Example:
@Bean
public JwtAuthenticationFilter jwtAuthenticationFilter(JwtService jwtService) {
return new CustomJwtAuthenticationFilter(jwtService);
}Applications may replace the default security configuration entirely.
Example:
@Bean
public SecurityFilterChain securityFilterChain(HttpSecurity http) throws Exception {
http.authorizeHttpRequests(auth -> auth
.requestMatchers("/public/**").permitAll()
.anyRequest().authenticated()
);
return http.build();
}jwt-spring-boot-starter
│
├── config
│ ├── JwtAutoConfiguration
│ └── JwtSecurityConfiguration
│
├── properties
│ └── JwtConfigurationProperties
│
├── security
│ └── JwtAuthenticationFilter
│
└── META-INF/spring
└── AutoConfiguration.imports
| Layer | Technology |
|---|---|
| Language | Java 21 |
| Framework | Spring Boot 4.x.x |
| Security | Spring Security |
| JWT | JJWT |
| Build Tool | Maven |
| Distribution | GitHub Packages |
| CI/CD | GitHub Actions |
The project uses:
- GitHub Actions
- Maven build automation
- automated dependency resolution
- cloud-based build validation
The pipeline validates:
- compilation
- dependency resolution
- Maven build integrity
on every push.
Currently distributed through:
- GitHub Packages
Future support planned for:
- Maven Central
Current version does not yet support:
- role-based authorization
- authorities extraction
- Redis token blacklist
- dynamic route exclusions
- RSA signing
- OAuth2 support
- refresh workflow authentication
These are planned future improvements.
- Dynamic excluded routes
- Role-based authorization
- Authorities extraction
- Custom annotations
- Token revocation
- Redis blacklist
- RSA support
- Public/private key signing
- Advanced claims validation
- Multi-tenant JWT support
- Swagger/OpenAPI integration
- Better exception handling
- Startup logs
- Enhanced configuration support
- Metrics & monitoring
- OAuth2 bridge
- Distributed token revocation
- Session synchronization
- API gateway integration
The project follows several important principles:
Provide useful defaults with minimal setup.
Applications should be able to override any starter component.
JWT infrastructure should require minimal repetitive code.
Separate:
- core JWT logic
- Spring integration
- security infrastructure
for maintainability.
Contributions are welcome.
Suggested contribution areas:
- feature improvements
- security enhancements
- performance optimization
- testing
- documentation
- integration support
git clone https://github.com/smitroy4/jwt-spring-boot-starter.gitmvn clean installmvn deployGitHub:
https://github.com/smitroy4
MIT License