Đây là một ứng dụng quản lý công việc (To-Do List) được xây dựng trên nền tảng Spring Boot 3+ với kiến trúc Hybrid Security. Dự án được thiết kế để phục vụ đồng thời hai loại client: các ứng dụng client sử dụng Stateless REST API (dùng JWT) và giao diện Web truyền thống Stateful Web Interface (dùng Session).
| Thành phần | Công nghệ | Mục đích/Tính năng |
|---|---|---|
| Backend Core | Spring Boot 3, Java 17 | API RESTful và MVC Controllers. |
| Bảo mật | Spring Security 6+ | Khung bảo mật chính (Xác thực và Ủy quyền). |
| Xác thực API | JWT (JJWT) | Cơ chế Stateless cho các ứng dụng client. |
| Web Interface | Thymeleaf | Giao diện quản lý User/Todo (mô hình Stateful). |
| Persistence | Spring Data JPA | Tải User và dữ liệu Todo từ Database. |
- Phân tách Hybrid Security:
- Hệ thống cấu hình
SecurityFilterChainđể hỗ trợ đồng thời hai luồng: Stateless (JWT) và Stateful (Session/Form Login) trên cùng một ứng dụng. - Đã giải quyết thành công vấn đề xung đột Filter bằng cách sử dụng phương thức
shouldNotFiltertrongJwtAuthenticationFilterđể giữ cho Filter JWT chỉ chạy trên các endpoint API (/project/**).
- Hệ thống cấu hình
- Ủy quyền Cấp độ Dữ liệu (
@PreAuthorize):- Triển khai
@EnableMethodSecurityvà sử dụng biểu thức SpEL (ví dụ:@userServiceImpl.isOwner(#id)) trên Service Layer để thực thi Data Ownership (Quyền sở hữu dữ liệu). Điều này đảm bảo User chỉ có thể thao tác với dữ liệu của chính họ.
- Triển khai
- Quản lý Role Tùy chỉnh:
- Tích hợp
CustomUserDetailsServiceđể tải thông tin người dùng và phân quyền (ADMIN/USER) từ Database, áp dụng phân quyền chi tiết (ví dụ:/project/users/**chỉ dành cho ADMIN).
- Tích hợp
- Thiết kế RESTful API:
- Tuân thủ các nguyên tắc RESTful cho các thao tác CRUD và xử lý lỗi xác thực bằng cách sử dụng
AuthenticationEntryPointtùy chỉnh (trả về 401 Unauthorized).
- Tuân thủ các nguyên tắc RESTful cho các thao tác CRUD và xử lý lỗi xác thực bằng cách sử dụng
- Java 17+
- Maven
- Docker (để triển khai)
-
Clone (Sao chép) Mã nguồn:
# Thay [LINK_CỦA_BẠN] bằng đường dẫn repository thực tế git clone [LINK_CỦA_BẠN] cd [TÊN_THƯ_MỤC_DỰ_ÁN]
-
Cấu hình Database: Cập nhật thông tin kết nối Database trong
application.properties. -
Build và Run (Sử dụng Docker):
- Build Image:
docker build -t todolist-app:latest . - Run Container:
docker run -d -p 8080:8080 --name todo-instance todolist-app:latest
- Build Image:
- Tài khoản Mặc định:
admin@test.com/123456vàuser@test.com/123456.
| Loại Truy cập | Endpoint | Mục đích |
|---|---|---|
| WEB Interface (Session) | http://localhost:8080/login |
Truy cập bằng trình duyệt để đăng nhập và kiểm tra giao diện quản lý User/Todo. |
| API Testing (JWT) | POST http://localhost:8080/project/auth/login |
Dùng Postman để lấy JWT Token và kiểm tra các endpoint API. |