# java-techie-jt/spring-security-jwt-example architecture

> Architecture diagram of the GitHub repository java-techie-jt/spring-security-jwt-example, generated by GitDiagram from its file tree, README and a sample of source files (last updated 2026-09-26). It is an AI-made overview: check details against the source.

- Interactive diagram: https://gitdiagram.com/java-techie-jt/spring-security-jwt-example
- Repository: https://github.com/java-techie-jt/spring-security-jwt-example

## Overview

This Spring Boot application demonstrates username/password authentication that issues signed JWTs, followed by bearer-token authentication on protected requests. The main flow is POST /authenticate → Spring’s authentication manager → user lookup → JWT issuance; subsequent requests pass through the configured JWT filter, which validates the token and sets the security context before authorization. Startup also seeds example users. The README offers no detailed capability map, so this view follows the sampled runtime code; framework dispatch and persistence configuration details are not fully shown.

Main entry points: [`src/main/java/com/javatechie/jwt/api/controller/WelcomeController.java`](https://github.com/java-techie-jt/spring-security-jwt-example/blob/master/src/main/java/com/javatechie/jwt/api/controller/WelcomeController.java) (Welcome Controller), [`src/main/java/com/javatechie/jwt/api/config/SecurityConfig.java`](https://github.com/java-techie-jt/spring-security-jwt-example/blob/master/src/main/java/com/javatechie/jwt/api/config/SecurityConfig.java) (Security Configuration), [`src/main/java/com/javatechie/jwt/api/filter/JwtFilter.java`](https://github.com/java-techie-jt/spring-security-jwt-example/blob/master/src/main/java/com/javatechie/jwt/api/filter/JwtFilter.java) (JWT Filter), [`src/main/java/com/javatechie/jwt/api/repository/UserRepository.java`](https://github.com/java-techie-jt/spring-security-jwt-example/blob/master/src/main/java/com/javatechie/jwt/api/repository/UserRepository.java) (User Repository)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_api["HTTP API"]
  node_app["Application Startup"]
  node_controller["Welcome Controller"]
  node_authrequest["Auth Request<br/>[AuthRequest.java]"]
end

subgraph group_security["JWT Security"]
  node_securityconfig["Security Configuration"]
  node_authmanager["Authentication Manager"]
  node_jwtfilter["JWT Filter<br/>[JwtFilter.java]"]
  node_jwtutil["JWT Utilities<br/>[JwtUtil.java]"]
  node_securitycontext["Security Context"]
end

subgraph group_users["User Data"]
  node_userservice["User Details Service"]
  node_userentity["User Entity<br/>[User.java]"]
  node_userrepository["User Repository"]
  node_database[("User Database")]
end

node_client(("API Client"))

node_client -->|"sends requests"| node_controller
node_controller -->|"binds credentials"| node_authrequest
node_controller -->|"authenticates"| node_authmanager
node_authmanager -->|"loads user"| node_userservice
node_userservice -->|"looks up username"| node_userrepository
node_userrepository -->|"reads users"| node_database
node_app -->|"seeds users"| node_userrepository
node_userrepository -->|"writes users"| node_database
node_controller -->|"generates token"| node_jwtutil
node_controller -->|"returns token"| node_client
node_securityconfig -->|"configures authentication"| node_authmanager
node_securityconfig -->|"registers user lookup"| node_userservice
node_securityconfig -->|"installs filter"| node_jwtfilter
node_jwtfilter -->|"extracts and validates"| node_jwtutil
node_jwtfilter -->|"loads token user"| node_userservice
node_jwtfilter -->|"sets authentication"| node_securitycontext
node_securityconfig -->|"protects routes"| node_controller

click node_app "https://github.com/java-techie-jt/spring-security-jwt-example/blob/master/src/main/java/com/javatechie/jwt/api/SpringSecurityJwtExampleApplication.java"
click node_controller "https://github.com/java-techie-jt/spring-security-jwt-example/blob/master/src/main/java/com/javatechie/jwt/api/controller/WelcomeController.java"
click node_authrequest "https://github.com/java-techie-jt/spring-security-jwt-example/blob/master/src/main/java/com/javatechie/jwt/api/entity/AuthRequest.java"
click node_securityconfig "https://github.com/java-techie-jt/spring-security-jwt-example/blob/master/src/main/java/com/javatechie/jwt/api/config/SecurityConfig.java"
click node_jwtfilter "https://github.com/java-techie-jt/spring-security-jwt-example/blob/master/src/main/java/com/javatechie/jwt/api/filter/JwtFilter.java"
click node_jwtutil "https://github.com/java-techie-jt/spring-security-jwt-example/blob/master/src/main/java/com/javatechie/jwt/api/util/JwtUtil.java"
click node_userservice "https://github.com/java-techie-jt/spring-security-jwt-example/blob/master/src/main/java/com/javatechie/jwt/api/service/CustomUserDetailsService.java"
click node_userentity "https://github.com/java-techie-jt/spring-security-jwt-example/blob/master/src/main/java/com/javatechie/jwt/api/entity/User.java"
click node_userrepository "https://github.com/java-techie-jt/spring-security-jwt-example/blob/master/src/main/java/com/javatechie/jwt/api/repository/UserRepository.java"

classDef toneNeutral fill:#f8fafc,stroke:#334155,stroke-width:1.5px,color:#0f172a
classDef toneBlue fill:#dbeafe,stroke:#2563eb,stroke-width:1.5px,color:#172554
classDef toneAmber fill:#fef3c7,stroke:#d97706,stroke-width:1.5px,color:#78350f
classDef toneMint fill:#dcfce7,stroke:#16a34a,stroke-width:1.5px,color:#14532d
classDef toneRose fill:#ffe4e6,stroke:#e11d48,stroke-width:1.5px,color:#881337
classDef toneIndigo fill:#e0e7ff,stroke:#4f46e5,stroke-width:1.5px,color:#312e81
classDef toneTeal fill:#ccfbf1,stroke:#0f766e,stroke-width:1.5px,color:#134e4a
class node_app,node_controller,node_authrequest,node_client toneBlue
class node_securityconfig,node_authmanager,node_jwtfilter,node_jwtutil,node_securitycontext toneAmber
class node_userservice,node_userentity,node_userrepository,node_database toneMint
```

## Components

### HTTP API

- [Application Startup](https://github.com/java-techie-jt/spring-security-jwt-example/blob/master/src/main/java/com/javatechie/jwt/api/SpringSecurityJwtExampleApplication.java): `src/main/java/com/javatechie/jwt/api/SpringSecurityJwtExampleApplication.java`
- [Welcome Controller](https://github.com/java-techie-jt/spring-security-jwt-example/blob/master/src/main/java/com/javatechie/jwt/api/controller/WelcomeController.java): `src/main/java/com/javatechie/jwt/api/controller/WelcomeController.java`
- [Auth Request](https://github.com/java-techie-jt/spring-security-jwt-example/blob/master/src/main/java/com/javatechie/jwt/api/entity/AuthRequest.java): `src/main/java/com/javatechie/jwt/api/entity/AuthRequest.java`

### JWT Security

- [Security Configuration](https://github.com/java-techie-jt/spring-security-jwt-example/blob/master/src/main/java/com/javatechie/jwt/api/config/SecurityConfig.java): `src/main/java/com/javatechie/jwt/api/config/SecurityConfig.java`
- **Authentication Manager**
- [JWT Filter](https://github.com/java-techie-jt/spring-security-jwt-example/blob/master/src/main/java/com/javatechie/jwt/api/filter/JwtFilter.java): `src/main/java/com/javatechie/jwt/api/filter/JwtFilter.java`
- [JWT Utilities](https://github.com/java-techie-jt/spring-security-jwt-example/blob/master/src/main/java/com/javatechie/jwt/api/util/JwtUtil.java): `src/main/java/com/javatechie/jwt/api/util/JwtUtil.java`
- **Security Context**

### User Data

- [User Details Service](https://github.com/java-techie-jt/spring-security-jwt-example/blob/master/src/main/java/com/javatechie/jwt/api/service/CustomUserDetailsService.java): `src/main/java/com/javatechie/jwt/api/service/CustomUserDetailsService.java`
- [User Entity](https://github.com/java-techie-jt/spring-security-jwt-example/blob/master/src/main/java/com/javatechie/jwt/api/entity/User.java): `src/main/java/com/javatechie/jwt/api/entity/User.java`
- [User Repository](https://github.com/java-techie-jt/spring-security-jwt-example/blob/master/src/main/java/com/javatechie/jwt/api/repository/UserRepository.java): `src/main/java/com/javatechie/jwt/api/repository/UserRepository.java`
- **User Database**

### Other components

- **API Client**

## Connections

- API Client → Welcome Controller: sends requests
- Welcome Controller → Auth Request: binds credentials
- Welcome Controller → Authentication Manager: authenticates
- Authentication Manager → User Details Service: loads user
- User Details Service → User Repository: looks up username
- User Repository → User Database: reads users
- Application Startup → User Repository: seeds users
- User Repository → User Database: writes users
- Welcome Controller → JWT Utilities: generates token
- Welcome Controller → API Client: returns token
- Security Configuration → Authentication Manager: configures authentication
- Security Configuration → User Details Service: registers user lookup
- Security Configuration → JWT Filter: installs filter
- JWT Filter → JWT Utilities: extracts and validates
- JWT Filter → User Details Service: loads token user
- JWT Filter → Security Context: sets authentication
- Security Configuration → Welcome Controller: protects routes
