Bối cảnh và vấn đề nghiên cứu
Sự phát triển của công nghệ thông tin và Internet đã làm thay đổi phương thức tiếp cận tri thức trong giáo dục, thúc đẩy quá trình chuyển đổi từ việc sử dụng tài liệu giấy truyền thống sang các nguồn tài nguyên học tập trực tuyến. Nhu cầu tìm kiếm, lưu trữ và chia sẻ tài liệu học tập của sinh viên các trường đại học và cao đẳng ngày càng tăng cao. Tuy nhiên, qua khảo sát thực tế, việc tiếp cận nguồn tài liệu học thuật trực tuyến hiện nay đang đối mặt với một số rào cản:
- Nguồn tài liệu trôi nổi trên Internet chưa được kiểm chứng chặt chẽ về mặt chất lượng và độ tin cậy.
- Nhiều nền tảng yêu cầu trả phí để truy cập hoặc tải tài liệu đầy đủ.
- Giao diện của nhiều trang web chứa nhiều quảng cáo, gây ảnh hưởng đến trải nghiệm của người học.
- Nguồn tài liệu thường nằm rải rác ở từng trường riêng biệt, thiếu một nền tảng tập trung có khả năng phân loại tài liệu chi tiết theo từng cơ sở đào tạo, danh mục và lĩnh vực chuyên môn.
Xuất phát từ bối cảnh trên, đề tài khóa luận "Xây dựng diễn đàn chia sẻ tài liệu cho sinh viên" được thực hiện bởi sinh viên Vũ Hoàng Anh (ngành Công nghệ Thông tin, chuyên ngành Công nghệ Phần mềm, Trường Đại học Sư phạm Kỹ thuật TP. Hồ Chí Minh) dưới sự hướng dẫn của TS. Mai Anh Thơ.
Nhiệm vụ của đề tài:
- Tìm hiểu và nghiên cứu hai công nghệ chính là Spring Boot (nền tảng Java) và ReactJS.
- Xây dựng hệ thống diễn đàn chia sẻ tài liệu cho sinh viên, hỗ trợ tìm kiếm, phân loại và quản lý tài liệu theo từng trường đại học, cao đẳng.
- Nắm vững quy trình phân tích, thiết kế và phát triển một sản phẩm phần mềm thực tế.
Đối tượng và phạm vi nghiên cứu:
- Đối tượng nghiên cứu: Các kỹ thuật phân tích và thiết kế hệ thống thông tin; framework Spring Boot để xây dựng giao diện lập trình ứng dụng (RESTful API); thư viện ReactJS để xây dựng giao diện người dùng; dịch vụ lưu trữ Google Drive API.
- Phạm vi chức năng: Tập trung xây dựng các phân hệ quản lý tài liệu (truy cập, đọc, tải lên, duyệt, chỉnh sửa, xóa, phân loại), quản lý người dùng, phân quyền truy cập, tương tác xã hội (thích, lưu, đánh giá tài liệu) và thống kê hệ thống.
- Phạm vi thời gian: Khóa luận được thực hiện từ ngày 28/02/2024 đến ngày 28/06/2024.
Cơ sở lý thuyết và phương pháp
Khóa luận áp dụng quy trình phân tích và thiết kế phần mềm hướng đối tượng kết hợp với các công nghệ web hiện đại.
Khung lý thuyết và mô hình kỹ thuật:
- Mô hình phân tích - thiết kế: Sử dụng ngôn ngữ mô hình hóa thống nhất (UML) để xây dựng lược đồ phân rã chức năng, đặc tả use case, lược đồ tuần tự (Sequence Diagram) và lược đồ lớp (Class Diagram).
- Mô hình kiến trúc phần mềm: Kiến trúc phân tầng tách biệt giữa tầng giao diện người dùng (Client-side) và tầng xử lý nghiệp vụ/dịch vụ (Server-side/API).
Phương pháp nghiên cứu thực tế:
- Phương pháp khảo sát hiện trạng và đối sánh: Tiến hành khảo sát chức năng, ưu điểm và hạn chế của hai hệ thống chia sẻ tài liệu thực tế gồm nền tảng quốc tế Studocu và hệ thống Thư viện số Trường Đại học Sư phạm Kỹ thuật TP.HCM (HCMUTE).
- Phương pháp mô hình hóa và thiết kế hệ thống: Chuyển đổi các yêu cầu nghiệp vụ thành 35 trường hợp sử dụng (use case), thiết lập các ràng buộc logic, quy tắc nghiệp vụ và xây dựng lược đồ cơ sở dữ liệu quan hệ.
- Phương pháp thực nghiệm và kiểm thử: Cài đặt mã nguồn, cấu hình tích hợp các API bên thứ ba, đóng gói ứng dụng qua Docker Compose và thực hiện kiểm thử chức năng theo kịch bản.
Nguồn dữ liệu:
- Dữ liệu khảo sát từ các nền tảng Studocu và Thư viện số HCMUTE.
- Cơ sở dữ liệu hệ thống được thiết kế và lưu trữ trên hệ quản trị cơ sở dữ liệu MySQL, kết hợp lưu trữ tệp tin nhị phân/tài liệu thông qua Google Cloud Platform (Google Drive API).
Thiết kế và triển khai
Hệ thống được thiết kế theo mô hình phân tách hoàn toàn giữa Client (Frontend) và Server (Backend), giao tiếp với nhau thông qua giao thức HTTP/HTTPS với định dạng dữ liệu JSON.
[Trình duyệt / ReactJS Client]
(HTTP/JSON) (Axios Requests)
Công nghệ và công cụ sử dụng
| Thành phần |
Công nghệ / Thư viện |
Vai trò trong hệ thống |
| Backend |
Spring Boot (Java), Tomcat |
Xây dựng RESTful API, xử lý nghiệp vụ, quản lý luồng dữ liệu |
| Bảo mật |
Spring Security, JSON Web Token (JWT) |
Xác thực danh tính, phân quyền người dùng qua Filter Chain |
| Truy xuất dữ liệu |
Spring Data JPA (Hibernate) |
Ánh xạ đối tượng - quan hệ (ORM), thao tác truy vấn cơ sở dữ liệu |
| Cơ sở dữ liệu |
MySQL |
Lưu trữ dữ liệu có cấu trúc (người dùng, danh mục, trường, tài liệu) |
| Frontend |
ReactJS, JSX, React Hooks |
Xây dựng giao diện đơn trang (SPA), điều hướng (useNavigate, useLocation, useParams) |
| Giao tiếp API |
Axios |
Gửi các HTTP request (GET, POST, PUT, DELETE) từ Client đến Backend |
| Lưu trữ tệp |
Google Drive API (Google Cloud Service Account) |
Lưu trữ, tải lên, xóa và quản lý quyền truy cập tệp tài liệu số |
| Đóng gói & Triển khai |
Docker Compose, Localhost/Hosting |
Đóng gói môi trường chạy ứng dụng, cấu hình dịch vụ đồng bộ |
Cơ chế xác thực và bảo mật
- Hệ thống áp dụng cơ chế xác thực không trạng thái (stateless) bằng mã thông báo JWT. Khi người dùng đăng nhập thành công, máy chủ tạo và trả về chuỗi JWT.
- Bộ lọc
JWT Filter được tích hợp vào SecurityFilterChain của Spring Security để chặn bắt mọi yêu cầu, giải mã token, xác minh tính hợp lệ và phân bổ quyền hạn tương ứng cho phiên làm việc.
- Hệ thống thiết lập các quy tắc nghiệp vụ chặt chẽ: mật khẩu yêu cầu độ dài tối thiểu 8 ký tự; tài khoản đăng ký phải sử dụng định dạng Gmail; phân quyền truy cập chia làm 3 nhóm đối tượng rõ rệt.
Tích hợp lưu trữ tệp qua Google Drive API
- Sử dụng tài khoản dịch vụ (Service Account) trên Google Cloud Console để lấy tệp thông tin xác thực (
credentials.json).
- Cấu hình Spring Bean cho
Drive service trong mã nguồn Backend.
- Tệp tài liệu do sinh viên hoặc quản trị viên tải lên được chuyển tiếp trực tiếp từ máy chủ Spring Boot lên không gian lưu trữ của Google Drive thông qua API, đồng thời hệ thống lưu lại mã định danh (File ID) và liên kết tệp vào cơ sở dữ liệu MySQL.
Nội dung chính theo từng chương
Chương 1: Khảo sát hiện trạng và xác định yêu cầu
Chương này phân tích tình hình thực tế về nhu cầu tài liệu học tập của sinh viên và đánh giá hai hệ thống hiện có:
| Hệ thống khảo sát |
Chức năng chính |
Hạn chế nhận định |
| Studocu |
Đăng ký, đăng nhập, tìm kiếm khóa học/tài liệu, đọc, tải lên, thích, bình luận, gói Premium trả phí |
Nguồn tài liệu chưa được kiểm soát chặt chẽ, nhiều tính năng bị khóa sau gói trả phí |
| Thư viện số HCMUTE |
Đăng ký, đăng nhập, tìm kiếm sách/tài liệu, đọc trực tuyến, tải lên, đánh giá, chia sẻ |
Phạm vi tài liệu chủ yếu giới hạn nội bộ trong Trường Đại học Sư phạm Kỹ thuật TP.HCM |
Từ kết quả khảo sát, tác giả xác định yêu cầu hệ thống cho 3 nhóm đối tượng:
- Sinh viên: Đăng ký, đăng nhập, quản lý thông tin cá nhân, tìm kiếm, đọc, thích, lưu, đánh giá, đăng tải, cập nhật và xóa tài liệu của bản thân.
- Quản lý (theo trường): Quản lý tài liệu và người dùng thuộc phạm vi trường học phụ trách; phê duyệt hoặc từ chối tài liệu tải lên; xóa các đánh giá không phù hợp của trường.
- Admin (Quản trị viên toàn hệ thống): Toàn quyền quản trị tài liệu, người dùng; quản lý và kích hoạt/hủy kích hoạt danh mục, lĩnh vực, trường đại học/cao đẳng; phê duyệt tài liệu và xem báo cáo thống kê.
Về yêu cầu phi chức năng:
- Hệ thống hỗ trợ đa người dùng truy cập trực tuyến đồng thời.
- Thời gian phản hồi tìm kiếm tài liệu tối đa không quá 5 giây.
- Cơ sở dữ liệu được thiết lập cơ chế sao lưu định kỳ, khả năng phục hồi nhanh khi có sự cố.
Chương 2: Mô hình hoá yêu cầu
Chương 2 mô tả chi tiết hệ thống bằng lược đồ chức năng tổng quan và phân rã thành 6 phân hệ nghiệp vụ chính: quản lý thông tin cá nhân, quản lý tài liệu, quản lý người dùng, quản lý danh mục, quản lý lĩnh vực, và quản lý trường.
Tác giả lập bảng đặc tả chi tiết cho 35 trường hợp sử dụng (từ UC-01 đến UC-35). Ví dụ về cấu trúc đặc tả các chức năng cơ bản:
- UC-01 (Đăng ký): Yêu cầu nhập email Gmail, mật khẩu từ 8 ký tự trở lên; hệ thống kiểm tra trùng lặp email và khởi tạo tài khoản sinh viên/giảng viên.
- UC-02 (Đăng nhập): Xác thực email và mật khẩu; trả về lỗi nếu thông tin sai lệch; hỗ trợ điều hướng đăng ký hoặc quên mật khẩu.
- UC-03 (Đăng xuất): Xác nhận yêu cầu từ người dùng và hủy bỏ phiên đăng nhập.
- UC-04 (Lấy lại mật khẩu): Tiếp nhận email, kiểm tra sự tồn tại trong cơ sở dữ liệu, gửi mã xác nhận qua email, kiểm tra mã xác thực trước khi cho phép nhập mật khẩu mới.
- UC-05 (Đổi mật khẩu): Kiểm tra tính chính xác của mật khẩu hiện tại trước khi cập nhật mật khẩu mới.
- UC-06 (Xem thông tin cá nhân): Truy xuất và hiển thị dữ liệu tài khoản từ máy chủ.
Chương 3: Thiết kế phần mềm
Chương 3 chuyển hóa các trường hợp sử dụng thành 35 lược đồ tuần tự (Sequence Diagram), thể hiện tương tác thời gian thực giữa 4 thành phần: Người dùng (User/Actor) $\rightarrow$ Giao diện (View/ReactJS) $\rightarrow$ Bộ điều khiển/Xử lý (Controller/Service Spring Boot) $\rightarrow$ Cơ sở dữ liệu/API (Database/Google Drive).
Chương này cũng hoàn thiện Lược đồ lớp (Class Diagram) chi tiết của toàn bộ hệ thống, xác định rõ các thực thể: User, Role, Document, Category, Field, School, Rating, Favorite, SavedDocument cùng các mối quan hệ liên kết và phương thức xử lý tương ứng.
Chương 4: Kiến trúc hệ thống
Tác giả trình bày chi tiết về kiến trúc đa tầng và cách thức hiện thực hóa kỹ thuật:
- Cấu trúc dự án Spring Boot quản lý bằng Maven với các tệp
pom.xml, các lớp Controller, cấu hình Tomcat nhúng.
- Cấu hình bảo mật Spring Security với
SecurityFilterChain, bộ lọc tùy biến JWT Filter và hàm xử lý tạo/trả token khi xác thực thành công.
- Cấu hình tầng truy xuất dữ liệu với
Spring Data JPA: xây dựng các Repository interface, các câu lệnh truy vấn tùy biến (custom query) và ánh xạ @Entity kết nối với MySQL trong application.properties.
- Kiến trúc ReactJS trên Frontend: tổ chức cấu trúc thư mục component, quản lý trạng thái bằng
useState, xử lý vòng đời bằng useEffect, định tuyến đường dẫn bằng react-router-dom (useNavigate, useLocation, useParams), truyền dữ liệu qua props và xử lý các cuộc gọi mạng bằng thư viện Axios.
- Tích hợp dịch vụ đám mây: các bước cấu hình dự án trên Google Cloud Platform, kích hoạt Google Drive API, tạo tài khoản Service Account, lấy khóa xác thực, cấu hình Bean Java và viết mã xử lý nghiệp vụ tải tệp lên (
upload) và xóa tệp (delete).
Chương 5: Thiết kế giao diện và xử lý
Chương 5 cung cấp thiết kế màn hình và quy trình xử lý cho 48 giao diện người dùng, phân chia theo 2 nhóm chính:
- Phân hệ Sinh viên và Khách (Hình 5.1 - 5.17 / Bảng 5.1 - 5.17): Giao diện trang chủ, đăng ký, đăng nhập, quên mật khẩu, thanh điều hướng trên/bên, thông tin cá nhân, chi tiết tài liệu, danh sách tài liệu chính, danh sách tài liệu đã thích, danh sách tài liệu đã lưu, danh sách tài liệu đã duyệt / đang chờ duyệt / bị từ chối, trang đăng tải và chỉnh sửa tài liệu.
- Phân hệ Quản lý và Admin (Hình 5.18 - 5.48 / Bảng 5.18 - 5.48): Bảng điều khiển quản trị, giao diện quản lý danh sách/chi tiết/thêm/sửa/xóa tài liệu, quản lý danh mục, quản lý lĩnh vực, quản lý trường đại học, quản lý người dùng, giao diện xét duyệt/từ chối tài liệu và quản lý/xóa đánh giá vi phạm.
Chương 6: Cài đặt, deploy và kiểm thử
Chương 6 trình bày quy trình đóng gói và triển khai ứng dụng:
- Hướng dẫn cài đặt hệ thống chạy cục bộ (local environment) và đóng gói môi trường tự động bằng Docker Compose.
- Thiết lập kế hoạch và chiến lược kiểm thử cho các ca sử dụng chính: đăng ký/đăng nhập, tải lên tài liệu, tìm kiếm/lọc tài liệu, kiểm duyệt tài liệu của admin, tương tác lưu/thích và đổi mật khẩu.
- Ghi nhận kết quả kiểm thử thực tế, sửa lỗi phát sinh và hoàn thiện sản phẩm trước khi đưa lên máy chủ thử nghiệm.
Kết quả và đóng góp
Kết quả đạt được
- Về kiến thức: Tác giả đã làm chủ quy trình phân tích và thiết kế hệ thống thông tin theo chuẩn UML, nắm vững cơ chế xây dựng ứng dụng web phân tán sử dụng Java Spring Boot kết hợp ReactJS, cơ chế bảo mật JWT và tương tác với Cloud API.
- Về kỹ năng: Nâng cao kỹ năng lập trình hướng đối tượng, thiết kế cơ sở dữ liệu quan hệ, kỹ năng cấu hình môi trường với Docker và kỹ năng xây dựng tài liệu kỹ thuật hoàn chỉnh.
- Về sản phẩm: Xây dựng thành công hệ thống diễn đàn chia sẻ tài liệu trực tuyến đáp ứng đầy đủ các yêu cầu chức năng nghiệp vụ đã đề ra:
- 35 chức năng hệ thống hoàn chỉnh với phân quyền 3 cấp (Sinh viên, Quản lý trường, Quản trị viên).
- Module tìm kiếm và phân loại tài liệu đa tầng (theo Trường học $\rightarrow$ Lĩnh vực $\rightarrow$ Danh mục).
- Tích hợp lưu trữ dữ liệu an toàn trên Google Drive thông qua tài khoản dịch vụ.
Đóng góp của đề tài
- Cung cấp một giải pháp phần mềm mã nguồn mở phục vụ nhu cầu chia sẻ tài liệu học tập giữa sinh viên các trường đại học, cao đẳng, khắc phục nhược điểm đóng kín của các thư viện nội bộ và rào cản chi phí của các nền tảng thương mại.
- Xây dựng quy trình kiểm duyệt tài liệu hai cấp (Quản lý trường và Admin hệ thống), góp phần sàng lọc nội dung tải lên, hạn chế tình trạng tài liệu rác và không chính xác.
Hạn chế và hướng nghiên cứu tiếp
Hạn chế
- Dung lượng và băng thông lưu trữ phụ thuộc vào chính sách và hạn ngạch của dịch vụ Google Drive API.
- Chưa tích hợp cơ chế tự động quét virus hoặc kiểm tra đạo văn đối với các tệp tài liệu được tải lên hệ thống trước khi phê duyệt.
- Chưa phát triển ứng dụng di động (Mobile App) riêng biệt, hiện tại mới chỉ hỗ trợ trên nền tảng web.
Hướng phát triển
- Tích hợp thêm công cụ xem trước tài liệu trực tiếp đa định dạng mượt mà hơn trên giao diện web mà không cần tải về.
- Xây dựng hệ thống gợi ý tài liệu thông minh dựa trên lịch sử xem, ngành học và trường học của người dùng.
- Mở rộng phát triển ứng dụng di động đa nền tảng (Flutter hoặc React Native) để tăng cường tính tiện dụng cho sinh viên.
Giá trị tham khảo
Khóa luận là tài liệu tham khảo hữu ích cho:
- Sinh viên chuyên ngành Công nghệ thông tin, Kỹ thuật phần mềm đang thực hiện đồ án tốt nghiệp hoặc các môn học Phân tích thiết kế hệ thống, Phát triển ứng dụng web.
- Lập trình viên muốn tìm hiểu mô hình phát triển ứng dụng Full-stack kết hợp giữa Spring Boot (REST API), Spring Security (JWT), Spring Data JPA và ReactJS (Single Page Application).
- Những ai quan tâm đến giải pháp tích hợp các dịch vụ đám mây của Google (Google Cloud Platform, Google Drive API) vào ứng dụng quản lý tệp tin trong môi trường doanh nghiệp vừa và nhỏ.
Câu hỏi thường gặp
1. Hệ thống phân chia quyền hạn của người dùng như thế nào?
Hệ thống phân chia thành 3 vai trò: Sinh viên (tìm kiếm, đọc, đăng tải, lưu, thích, đánh giá tài liệu); Quản lý (quản lý người dùng, tài liệu, phê duyệt tài liệu và xóa đánh giá trong phạm vi trường học của mình); Admin (quản trị toàn bộ người dùng, tài liệu, trường, danh mục, lĩnh vực, phê duyệt tài liệu và xem thống kê).
2. Công nghệ nào được sử dụng để xử lý việc lưu trữ và tải tệp tài liệu?
Tài liệu được lưu trữ trên nền tảng đám mây Google Drive thông qua Google Drive API với cơ chế xác thực Service Account của Google Cloud Platform. Phía máy chủ Spring Boot đóng vai trò trung gian nhận tệp từ client, đẩy lên Google Drive và lưu trữ File ID vào cơ sở dữ liệu MySQL.
3. Cơ chế bảo mật và xác thực người dùng trong hệ thống được hiện thực ra sao?
Hệ thống sử dụng cơ chế xác thực không trạng thái qua Spring Security kết hợp JSON Web Token (JWT). Token được cấp phát khi đăng nhập hợp lệ và được kiểm tra bởi bộ lọc JWT Filter trong SecurityFilterChain trên mỗi HTTP request.
4. Khóa luận giải quyết nhược điểm nào của các nền tảng chia sẻ tài liệu hiện nay như Studocu hay Thư viện số HCMUTE?
Khóa luận khắc phục tính đóng kín (chỉ phục vụ nội bộ một trường của Thư viện số HCMUTE) bằng cách mở rộng mô hình phân loại tài liệu theo nhiều trường đại học khác nhau; đồng thời khắc phục tình trạng thiếu kiểm duyệt và rào cản tài khoản trả phí Premium của Studocu bằng quy trình phê duyệt tài liệu hai cấp miễn phí cho sinh viên.
Kết luận
Khóa luận tốt nghiệp "Xây dựng diễn đàn chia sẻ tài liệu cho sinh viên" của tác giả Vũ Hoàng Anh đã hoàn thành toàn diện các mục tiêu đặt ra từ khâu khảo sát, phân tích thiết kế hệ thống cho đến cài đặt, triển khai và kiểm thử. Bằng việc kết hợp kiến trúc phân tầng giữa Spring Boot và ReactJS cùng việc tích hợp Google Drive API, sản phẩm đã cung cấp một giải pháp trực tuyến hiệu quả hỗ trợ sinh viên trao đổi và tìm kiếm tài liệu học tập theo từng trường học và chuyên ngành. Đồ án thể hiện tính thực tiễn cao, đáp ứng đầy đủ các tiêu chuẩn học thuật của một khóa luận tốt nghiệp ngành Công nghệ Thông tin.