REST API quan ly nhan su voi JWT auth, refresh token rotation, RBAC theo apiPath + method, upload file va dashboard tong quan.
Backend gom cac feature:
- Auth: register/login/me/refresh/logout
- User, Company, Role, Permission CRUD
- Dashboard tong hop so lieu
- Upload file avatar/logo
Tat ca API business tra ve ApiResponse<T>.
- Spring Boot
4.0.2, Java25 - Security bang OAuth2 Resource Server + JWT
- RBAC dong tu DB (Role -> Permission)
- Refresh token luu DB (
refresh_tokens), revoke khi logout, co cleanup scheduler moi ngay luc02:00 - User filter ho tro:
name,address,email,ageFrom,ageTo,gender - Pagination/sorting cho cac API list
- Spring MVC, Spring Security 7, Spring Data JPA, Hibernate
- MySQL (runtime), H2 (test)
- SpringDoc OpenAPI (Swagger UI)
- JUnit 5, Mockito, MockMvc
src/main/java/vn/luuhien/springrestwithai
|- config/ # security, jwt, openapi, scheduler, seeder, upload config
|- dto/ # ApiResponse, PagedResult
|- exception/ # base exception + global handler
|- feature/
| |- auth/
| |- user/
| |- company/
| |- role/
| |- permission/
| |- file/
| |- dashboard/
|- security/ # CustomUserDetailsService, PermissionAuthorizationManager
- JDK 25
- Maven 3.9+
- MySQL 8+
File: src/main/resources/application.yml
Cac muc can kiem tra truoc khi chay:
spring.datasource.*(url/username/password)jwt.secret,jwt.expiration,jwt.refresh-expirationapp.upload.base-dirapp.seed-data=true(dev seed)
mvn spring-boot:runWindows (wrapper):
.\mvnw.cmd spring-boot:runServer mac dinh: http://localhost:8080
- Swagger UI:
http://localhost:8080/swagger-ui/index.html - OpenAPI JSON:
http://localhost:8080/v3/api-docs
- Auth:
/api/v1/auth/* - Users:
/api/v1/users - Companies:
/api/v1/companies - Roles:
/api/v1/roles - Permissions:
/api/v1/permissions - Dashboard:
/api/v1/dashboard - Files:
POST /api/v1/files
Chi tiet day du: docs/API_SPEC.md
- Public: login/register + swagger/resources whitelist
- Protected: cac endpoint con lai
- Authorization:
- Match
HTTP method + request path - Check permission theo role trong JWT
- Ho tro role key ca dang
SUPER_ADMINvaROLE_SUPER_ADMIN
- Match
Chay toan bo:
mvn testNeu moi truong Maven local repo bi loi quyen, dung:
mvn -Dmaven.repo.local=.m2/repository testdocs/PROJECT-STATUS.mddocs/PROJECT-RULES.mddocs/API_SPEC.mddocs/DATABASE.mddocs/ARCHITECTURE.mddocs/decisions/*.md
Xem LICENSE.MD va LICENSE_VI.md.