Dự án này là một ví dụ mở rộng về việc bảo mật ứng dụng web sử dụng Spring Boot Security với thông tin người dùng được lưu trữ trong cơ sở dữ liệu (H2 Database).
- Xác thực người dùng (Authentication): Người dùng đăng nhập với thông tin được kiểm tra từ cơ sở dữ liệu.
- Phân quyền (Authorization):
- USER: Có quyền truy cập các trang cơ bản sau khi đăng nhập.
- ADMIN: Có quyền truy cập trang quản trị (
/admin).
- Đăng ký: Người dùng mới có thể đăng ký tài khoản (mặc định vai trò
USER). - Cơ sở dữ liệu: Sử dụng H2 Database (in-memory) để lưu trữ
users. - Mã hóa mật khẩu: Sử dụng
BCryptPasswordEncoderđể bảo mật mật khẩu.
- Java 17 trở lên
- Maven
-
Clone hoặc mở dự án.
-
Mở terminal tại thư mục gốc của dự án.
-
Chạy lệnh sau:
./mvnw spring-boot:run
(Hoặc
mvn spring-boot:runnếu đã cài Maven toàn cục) -
Ứng dụng sẽ khởi động tại
http://localhost:8080.
Hệ thống sẽ tự động tạo một tài khoản Admin khi khởi chạy lần đầu:
- Username:
admin - Password:
admin123 - Vai trò:
ADMIN
- Trang chủ (Home):
- Truy cập
http://localhost:8080/. - Trang này công khai (public).
- Truy cập
- Đăng ký (Register):
- Truy cập
http://localhost:8080/register. - Tạo một tài khoản mới (ví dụ:
user1/123456). - Sau khi đăng ký thành công sẽ chuyển hướng về trang Login.
- Truy cập
- Đăng nhập (Login):
- Truy cập
http://localhost:8080/loginhoặc bấm "Sign In". - Đăng nhập bằng tài khoản vừa tạo hoặc tài khoản admin.
- Truy cập
- Trang Admin:
- Truy cập
http://localhost:8080/admin. - Nếu đăng nhập là
admin: Sẽ thấy nội dung trang admin. - Nếu đăng nhập là
user1: Sẽ bị từ chối truy cập (Lỗi 403 Forbidden).
- Truy cập
- H2 Console (Kiểm tra Database):
- Truy cập
http://localhost:8080/h2-console. - JDBC URL:
jdbc:h2:mem:testdb - User Name:
sa - Password: (để trống)
- Bấm Connect.
- Chạy câu lệnh SQL
SELECT * FROM USERS;để xem danh sách người dùng đã mã hóa mật khẩu.
- Truy cập
src/main/java/org/example/gssecuringweb:config/: Cấu hình Security (SecurityConfig) và Khởi tạo dữ liệu (DataInitializer).controller/: Xử lý các request (MainController).model/: Các thực thể JPA (User) và Enum (Role).repository/: Interface tương tác CSDL (UserRepository).service/: Logic nghiệp vụ và Custom UserDetailsService (UserService).
src/main/resources/templates: Các file giao diện HTML (Thymeleaf).