六,業務功能:登入

Rainbow-Sea發表於2024-08-25

六,業務功能:登入

@

目錄
  • 六,業務功能:登入
  • 編寫 AuthController 作為登入控制器
  • 編寫 EmpService 業務處理
  • 編寫 target.html 登入成功頁面顯示
  • 啟動 Tomcat 伺服器,執行測試


編寫 AuthController 作為登入控制器

demo-module02-component 模組下,的 src/main/java/目錄下建立一個名為:

com.rainbowsea.imperial.court.controller 的包,下建立一個名為 AuthController 的類(注意:類上要新增上 @Controller 註解),作為登入控制器處理

在這裡插入圖片描述

package com.rainbowsea.imperial.court.controller;


import com.rainbowsea.imperial.court.entity.User;
import com.rainbowsea.imperial.court.service.api.UserService;
import com.rainbowsea.imperial.court.utils.ImperialCourtConst;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;

import javax.servlet.http.HttpSession;

@Controller //
public class AuthController {


    @Autowired
    private UserService userService;

    @RequestMapping("/auth/login")
    public String doLogin(
            @RequestParam("loginAccount") String loginAccount,
            @RequestParam("loginPassword") String loginPassword,
            HttpSession session,
            Model model
    ) {

        // 1、嘗試查詢登入資訊
        User user = userService.getUserByLogin(loginAccount, loginAccount);

        // 2、判斷登入是否成功
        if (user == null) {
            // 登入失敗,密碼錯誤
            model.addAttribute("message", ImperialCourtConst.LOGIN_FAILED_MESSAGE);

            // 返回首頁重新登入
            // 3、如果登入失敗則回到登入頁面顯示提示訊息
            return "index";

        } else {

            // 4、如果登入成功則將登入資訊存入 Session 域
            session.setAttribute("loginInfo", user);

            return "target";
        }

    }
}

在 demo-module01-web 模組下的 resources 根路徑下的 spring mvc.xml 檔案中新增上,對於 com.rainbowsea.imperial.court.controller 包下的控制器的元件掃描。

在這裡插入圖片描述

編寫 EmpService 業務處理

在 demo-module02-component 模組下的,src\main\java 目錄下建立一個:com.rainbowsea.imperial.court.service.api包,在該包下建立一個名為 :UserService 的介面。

在這裡插入圖片描述

package com.rainbowsea.imperial.court.service.api;

import com.rainbowsea.imperial.court.entity.User;

public interface UserService {
    User getUserByLogin(String loginAccount, String loginAccount1);

}

在 demo-module02-component 模組下的,src\main\java 目錄下建立一個:com.rainbowsea.imperial.court.service.impl包,在該包下建立一個名為 :UserServiceImpl 類並實現 UserService 的介面中的 getUserByLogin( ) 方法。

在這裡插入圖片描述

package com.rainbowsea.imperial.court.service.impl;

import com.rainbowsea.imperial.court.entity.User;
import com.rainbowsea.imperial.court.entity.UserExample;
import com.rainbowsea.imperial.court.mapper.UserMapper;
import com.rainbowsea.imperial.court.service.api.UserService;
import com.rainbowsea.imperial.court.utils.MD5Util;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import java.util.List;


@Service
@Transactional(readOnly = true)  // 事務管理
public class UserServiceImpl implements UserService {

    @Autowired
    private UserMapper userMapper;

    @Override
    public User getUserByLogin(String loginAccount, String loginPassword) {

        // 1、密碼加密
        String encodeLoginPassword = MD5Util.encode(loginPassword);

        // 2、透過 QBC 查詢方式封裝查詢條件
        UserExample example = new UserExample();

        UserExample.Criteria criteria = example.createCriteria();
        criteria.andNameEqualTo(loginAccount).andPasswordEqualTo(loginPassword);

        List<User> users = userMapper.selectByExample(example);
        if (users != null && users.size() > 0) {

            // 3、返回查詢結果
            return users.get(0);
        }

        return null;
    }
}

在這裡插入圖片描述

或者是在 spring-persist.xml 中新增元件掃描也可以。

注意:無論是 sping mvc.xml 還是 spring-persist.xml 兩者的哪一個都可以,但是其中的一個一定要新增上 對於 service 業務上的類,的元件掃描。

編寫 target.html 登入成功頁面顯示

在 demo-module01-web 模組下的 webapp\WEB-INF\templates 目錄下,建立一個名為 target.html 的前端頁面。

在這裡插入圖片描述

<!DOCTYPE html>
<html lang="en" xml:th="http://www.thymeleaf.org">
<head>
    <meta charset="UTF-8">
    <title>登入成功</title>
</head>
<body>

<p th:text="${session.loginInfo}"></p>

</body>
</html>

啟動 Tomcat 伺服器,執行測試

測試:輸入正確的密碼,能否登入成功

在這裡插入圖片描述

測試:輸入錯誤的密碼,能否成功

在這裡插入圖片描述

  • 對應順序上一節內容:✏️✏️✏️ 五,搭建環境:輔助功能-CSDN部落格

  • 對應順序是下一節內容:✏️✏️✏️

相關文章