六,业务功能:登录

六,业务功能:登录

@


编写 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 服务器,运行测试

测试:输入正确的密码,能否登录成功

测试:输入错误的密码,能否成功