From 9cb844feef59facaa0204912be9ed96223cd3b61 Mon Sep 17 00:00:00 2001 From: Suzune <124695777+Suzune705@users.noreply.github.com> Date: Tue, 11 Nov 2025 14:41:33 +0700 Subject: [PATCH 1/2] refactor: code and fix tracking user --- .../controller/admin/user/LogaoutAllUser.java | 4 +- .../admin/user/LogoutUserController.java | 1 + .../user/UserBorrowingRecordController.java | 2 +- .../filter/AuthenticationLoginController.java | 15 ++-- .../filter/AutholizationUserController.java | 2 +- .../controller/user/ForgotPassword.java | 4 +- .../controller/user/RegisterController.java | 68 +++++++++--------- .../controller/user/SettingController.java | 20 ++---- .../user/UpdateProfileController.java | 4 +- .../user/UserDashBoardController.java | 10 +-- src/java/com/library/dao/BookDaoImpl.java | 2 +- src/java/com/library/dao/UserDao.java | 2 +- src/java/com/library/dao/UserDaoImpl.java | 6 +- src/java/com/library/dao/UserSessionDao.java | 2 +- .../com/library/dao/UserSessionDaoImpl.java | 23 +++++- .../exception/AccountHasExistedException.java | 17 +++++ .../com/library/factory/ServiceFactory.java | 5 +- .../com/library/service/ActivityService.java | 4 +- src/java/com/library/service/BookService.java | 2 +- src/java/com/library/service/MailService.java | 18 ++--- .../library/service/TrackingUserService.java | 3 + src/java/com/library/service/UserService.java | 21 ++++-- src/java/com/library/util/DBConnection.java | 2 +- src/java/com/library/util/SessionTracker.java | 19 ++++- src/java/com/library/util/TimeFormatter.java | 6 +- src/java/com/library/util/Validator.java | 3 +- web/WEB-INF/views/user/setting.jsp | 55 +------------- ...1783045355961033_8515654082100005620_n.jpg | Bin 0 -> 152783 bytes 28 files changed, 160 insertions(+), 160 deletions(-) create mode 100644 src/java/com/library/exception/AccountHasExistedException.java create mode 100644 web/resources/images/avatar/578272435_1783045355961033_8515654082100005620_n.jpg diff --git a/src/java/com/library/controller/admin/user/LogaoutAllUser.java b/src/java/com/library/controller/admin/user/LogaoutAllUser.java index 5ae7d8b..fe0e95c 100644 --- a/src/java/com/library/controller/admin/user/LogaoutAllUser.java +++ b/src/java/com/library/controller/admin/user/LogaoutAllUser.java @@ -5,6 +5,7 @@ package com.library.controller.admin.user; import com.library.factory.ServiceFactory; +import com.library.service.TrackingUserService; import com.library.service.UserService; import com.library.util.SessionTracker; import java.io.IOException; @@ -32,8 +33,9 @@ public class LogaoutAllUser extends HttpServlet { @Override protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { - + userService.logoutAllUser(); + TrackingUserService.clear(); HttpSession session = request.getSession(); session.setAttribute("logAll", "logout all users done!"); response.sendRedirect(request.getContextPath() + "/admin/user-manager"); diff --git a/src/java/com/library/controller/admin/user/LogoutUserController.java b/src/java/com/library/controller/admin/user/LogoutUserController.java index bc03b4c..c2cd0e3 100644 --- a/src/java/com/library/controller/admin/user/LogoutUserController.java +++ b/src/java/com/library/controller/admin/user/LogoutUserController.java @@ -30,6 +30,7 @@ public class LogoutUserController extends HttpServlet { UserDao userDao = new UserDaoImpl(); + private final TrackingUserService trackService = ServiceFactory.getTrackingUserService(); private final UserService userService = ServiceFactory.getUserService(); diff --git a/src/java/com/library/controller/admin/user/UserBorrowingRecordController.java b/src/java/com/library/controller/admin/user/UserBorrowingRecordController.java index b6b3113..ca9aef0 100644 --- a/src/java/com/library/controller/admin/user/UserBorrowingRecordController.java +++ b/src/java/com/library/controller/admin/user/UserBorrowingRecordController.java @@ -23,7 +23,7 @@ */ @WebServlet(name = "ManagerUserController", urlPatterns = {"/admin/user-borrowing-record"}) public class UserBorrowingRecordController extends HttpServlet { - + private final UserService userService = ServiceFactory.getUserService(); @Override diff --git a/src/java/com/library/controller/filter/AuthenticationLoginController.java b/src/java/com/library/controller/filter/AuthenticationLoginController.java index b073a2d..24ca43a 100644 --- a/src/java/com/library/controller/filter/AuthenticationLoginController.java +++ b/src/java/com/library/controller/filter/AuthenticationLoginController.java @@ -76,15 +76,14 @@ protected void doPost(HttpServletRequest request, HttpServletResponse response) String hashedPassword = userService.getHashedPassword(account); if (HashPassword.checkPassword(pass, hashedPassword)) { session.setAttribute("account", account); - session.setAttribute("user", user); - TrackingUserService.add(account); - activityService.ActivityUser(1, account); - userService.setOnlineUser(account); - int userID = userDao.findUserID(account); - trackService.updateData(session.getId(), userID); - SessionTracker.addSessionToServer(session.getId(), session); - + session.setAttribute("user", user); + SessionTracker.addSessionToServer(session.getId(), session); if (user.getRole().equals("user")) { + TrackingUserService.add(account); + activityService.ActivityUser(1, account); + userService.setOnlineUser(account); + int userID = userDao.findUserID(account); + trackService.updateData(session.getId(), userID); response.sendRedirect(request.getContextPath() + "/book/list"); return; } else { diff --git a/src/java/com/library/controller/filter/AutholizationUserController.java b/src/java/com/library/controller/filter/AutholizationUserController.java index a0799fd..ce902ec 100644 --- a/src/java/com/library/controller/filter/AutholizationUserController.java +++ b/src/java/com/library/controller/filter/AutholizationUserController.java @@ -44,7 +44,7 @@ public void doFilter(ServletRequest servletRequest, ServletResponse servletRespo String[] publicPaths = { "/login", "/register", "/book/list", - "/resource/", "/images/", ".css", ".js", ".png", ".jpg" + "/resource/", "/images/", ".css", ".js", ".png", ".jpg", "/user/forgot-password" }; for (String p : publicPaths) { if (path.contains(p)) { diff --git a/src/java/com/library/controller/user/ForgotPassword.java b/src/java/com/library/controller/user/ForgotPassword.java index 860cb57..f9892ea 100644 --- a/src/java/com/library/controller/user/ForgotPassword.java +++ b/src/java/com/library/controller/user/ForgotPassword.java @@ -51,10 +51,10 @@ protected void doPost(HttpServletRequest request, HttpServletResponse response) Validator.requireNotEmpty(account); userService.isAccountExist(account); String tmp = RandomPassword.generatePassword(); - String subject = "Password Recovery - Library System"; + String title = "Password Recovery - Library System"; String message = "
Your New Pass : " + tmp + "
"; userService.updatePassword(account, HashPassword.hash(tmp)); - MailService.send(account, subject, message); + MailService.send(account, title, message); session.setAttribute("message", "we have sent your password via email"); response.sendRedirect(request.getContextPath() + "/user/forgot-password"); } catch (ValidationException e) { diff --git a/src/java/com/library/controller/user/RegisterController.java b/src/java/com/library/controller/user/RegisterController.java index 9135658..7933964 100644 --- a/src/java/com/library/controller/user/RegisterController.java +++ b/src/java/com/library/controller/user/RegisterController.java @@ -2,7 +2,6 @@ * Click nbfs://nbhost/SystemFileSystem/Templates/Licenses/license-default.txt to change this license * Click nbfs://nbhost/SystemFileSystem/Templates/JSP_Servlet/Servlet.java to edit this template */ - package com.library.controller.user; import java.io.IOException; @@ -14,61 +13,58 @@ import jakarta.servlet.http.HttpServletResponse; import com.library.dao.UserDao; import com.library.dao.UserDaoImpl; +import com.library.exception.AccountHasExistedException; +import com.library.exception.AccountNotExistException; +import com.library.exception.ValidationException; + +import com.library.factory.ServiceFactory; +import com.library.service.UserService; import com.library.util.HashPassword; +import com.library.util.Validator; import jakarta.servlet.http.HttpSession; +import sun.security.validator.ValidatorException; + /** * - * @author hieuchu + * @author hieuchu */ -@WebServlet(name="RegisterController", urlPatterns={"/user/register"}) +@WebServlet(name = "RegisterController", urlPatterns = {"/user/register"}) public class RegisterController extends HttpServlet { - UserDao userDao = new UserDaoImpl(); - + + private final UserService userService = ServiceFactory.getUserService(); + @Override protected void doGet(HttpServletRequest request, HttpServletResponse response) - throws ServletException, IOException { + throws ServletException, IOException { HttpSession session = request.getSession(); String error = (String) session.getAttribute("error"); request.setAttribute("error", error); session.removeAttribute("error"); - request.getRequestDispatcher("/WEB-INF/views/user/register.jsp").forward(request, response); - } + request.getRequestDispatcher("/WEB-INF/views/user/register.jsp").forward(request, response); + } + @Override protected void doPost(HttpServletRequest request, HttpServletResponse response) - throws ServletException, IOException { + throws ServletException, IOException { HttpSession session = request.getSession(); String userName = request.getParameter("username"); String pass = request.getParameter("password"); - String account = request.getParameter("account"); - if(userName.trim().isEmpty()){ - session.setAttribute("error", "Vui lòng nhập họ và tên!"); - response.sendRedirect(request.getContextPath() + "/user/register"); - return; - } - else if(pass.trim().isEmpty()){ - session.setAttribute("error", "Vui lòng nhập mật khẩu!"); - response.sendRedirect(request.getContextPath() + "/user/register"); - return; - } - else if(account.trim().isEmpty()){ - session.setAttribute("error", "Vui lòng nhập tên đăng nhập!"); + String account = request.getParameter("account"); + try { + Validator.validateUserInput(account, pass); + userService.hasAccountExisted(account); + String hashedPassword = HashPassword.hash(pass); + userService.addUser(userName, account, hashedPassword); + session.setAttribute("success", "Resgiter Done !!!"); + response.sendRedirect(request.getContextPath() + "/user/login"); + } catch (AccountHasExistedException s) { + session.setAttribute("error", "account has existed !!!"); response.sendRedirect(request.getContextPath() + "/user/register"); - return; - } - - if(userDao.checkUserExistence(account)){ - session.setAttribute("error", "Tên đăng nhập đã được sử dụng!"); + } catch (ValidationException s1) { + session.setAttribute("error", s1.getMessage()); response.sendRedirect(request.getContextPath() + "/user/register"); - return; - } - else{ - String hashedPassword = HashPassword.hash(pass); - userDao.addNewUser(userName, account, hashedPassword); - session.setAttribute("success", "Bạn đã đăng kí thành công!"); - response.sendRedirect(request.getContextPath() + "/user/login"); - return; + } } - } diff --git a/src/java/com/library/controller/user/SettingController.java b/src/java/com/library/controller/user/SettingController.java index d663f47..8027022 100644 --- a/src/java/com/library/controller/user/SettingController.java +++ b/src/java/com/library/controller/user/SettingController.java @@ -33,29 +33,19 @@ public class SettingController extends HttpServlet { @Override protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { - - HttpSession session = request.getSession(false); -// if (session == null || session.getAttribute("account") == null) { -// response.sendRedirect(request.getContextPath() + "/user/login"); -// return; -// } + HttpSession session = request.getSession(false); String account = (String) session.getAttribute("account"); try { - UserProfileDTO dto = userService.getProfileUserByAccount(account); - + UserProfileDTO dto = userService.getProfileUserByAccount(account); String error = (String) session.getAttribute("changePasswordError"); - String success = (String) session.getAttribute("changePasswordSuccess"); - + String success = (String) session.getAttribute("changePasswordSuccess"); request.setAttribute("error", error); - request.setAttribute("success", success); - + request.setAttribute("success", success); session.removeAttribute("changePasswordError"); session.removeAttribute("changePasswordSuccess"); - session.setAttribute("user", dto); - + session.setAttribute("user", dto); request.getRequestDispatcher("/WEB-INF/views/user/setting.jsp").forward(request, response); return; - } catch (UserNotFoundException u) { response.sendError(404, "User not found"); } diff --git a/src/java/com/library/controller/user/UpdateProfileController.java b/src/java/com/library/controller/user/UpdateProfileController.java index dbe1138..dce8198 100644 --- a/src/java/com/library/controller/user/UpdateProfileController.java +++ b/src/java/com/library/controller/user/UpdateProfileController.java @@ -83,13 +83,13 @@ protected void doPost(HttpServletRequest request, HttpServletResponse response) boolean checkUpdate = userService.updateProfileUser(account, avatar, fullName, userID); if (checkUpdate) { - request.setAttribute("isUpdated", "✅ You have updated your profile successfully!"); + request.setAttribute("isUpdated", "You have updated your profile successfully!"); session.removeAttribute("user"); u.setNewProfile(fullName, account, avatar); session.setAttribute("user", u); activityService.ActivityUser(2, account); } else { - request.setAttribute("isUpdated", "❌ Failed to update your profile. Please try again!"); + request.setAttribute("isUpdated", " Failed to update your profile"); } request.getRequestDispatcher("/WEB-INF/views/user/setting.jsp").forward(request, response); } diff --git a/src/java/com/library/controller/user/UserDashBoardController.java b/src/java/com/library/controller/user/UserDashBoardController.java index b33b12a..656d774 100644 --- a/src/java/com/library/controller/user/UserDashBoardController.java +++ b/src/java/com/library/controller/user/UserDashBoardController.java @@ -25,18 +25,14 @@ public class UserDashBoardController extends HttpServlet { BookDao bookDao = new BookDaoImpl(); - BorrowingDao borrowDao = new BorrowingDaoImpl(); + BorrowingDao borrowDao = new BorrowingDaoImpl(); + @Override protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { int totalBook = bookDao.totalBook(); - HttpSession session = request.getSession(false); //get available session + HttpSession session = request.getSession(false); -// check if the session is null or if the user has not logged in yet - if(session == null || session.getAttribute("account") == null){ - response.sendRedirect(request.getContextPath() + "/user/login"); - return ; - } // take current user account String account = (String)session.getAttribute("account"); diff --git a/src/java/com/library/dao/BookDaoImpl.java b/src/java/com/library/dao/BookDaoImpl.java index 24d6db3..ef4ab7b 100644 --- a/src/java/com/library/dao/BookDaoImpl.java +++ b/src/java/com/library/dao/BookDaoImpl.java @@ -47,7 +47,7 @@ public List