Overview
Built with Spring Boot 3.3.8, the user service handles user profile information, address management, and integrates with the auth service for JWT-based authentication.The User service runs on port 8082 by default and uses PostgreSQL for data persistence.
Technology stack
- Framework: Spring Boot 3.3.8
- Language: Java 17
- Database: PostgreSQL
- Security: Spring Security + OAuth2 Resource Server
- Key dependencies:
- Spring Data JPA
- Spring Security OAuth2 Resource Server
- Spring Boot Actuator
- Micrometer Prometheus
- Lombok
Configuration
Environment variables
Server port
Database configuration
PostgreSQL host
PostgreSQL port
Database name
Database username
Database password
Hibernate DDL auto (update for dev, validate for prod)
JWT configuration
JWT verification secret (must match auth-service)
JWT issuer URI for validation
API endpoints
User profile endpoints
Create user profile
Get all users (Admin only)
Get user by ID
Update user profile
Delete user profile
Address endpoints
The service also provides address management endpoints for user shipping/billing addresses. See the AddressController for full details.Data models
UserProfile entity
Address entity
Users can have multiple addresses for shipping and billing purposes.Authorization
The service uses Spring Security with custom authorization logic:- Admin users can access all user profiles
- Regular users can only access their own profile
- Authorization is handled by
@authorizationService.canAccessUser(authentication, #userId)
Health check
Metrics
Prometheus metrics are available at/actuator/prometheus.
Running the service
Security
- JWT Authentication: All endpoints require valid JWT token
- Role-based access: ADMIN role required for listing all users
- Resource-based authorization: Users can only access their own data
Dependencies
- PostgreSQL: For user profile and address storage
- Auth service: For JWT token issuance and user ID mapping
Source code
Location:~/workspace/source/micros/user-service/
Key files:
src/main/java/com/qeetmart/user/api/controller/UserController.java- User endpointssrc/main/java/com/qeetmart/user/api/controller/AddressController.java- Address endpointssrc/main/java/com/qeetmart/user/domain/entity/UserProfile.java- User entitysrc/main/java/com/qeetmart/user/infrastructure/security/AuthorizationService.java- Authorization logicsrc/main/resources/application.yml- Configuration