篇章八 论坛系统——业务开发——登录

目录

1.登录

[1.1 顺序图](#1.1 顺序图)

[1.2 参数要求](#1.2 参数要求)

[1.3 接口规范](#1.3 接口规范)

[1.4 实现流程](#1.4 实现流程)

1.编写SQL

2.dao层接口

3.定义Service接口

4.实现Service接口

5.单元测试

[6. Controller实现方法对外提供API接口](#6. Controller实现方法对外提供API接口)

7.测试API接口

8.实现前端逻辑,完成前后端交互

​编辑


1.登录

1.1 顺序图

1.2 参数要求

1.3 接口规范

1.4 实现流程

1.编写SQL

2.dao层接口

3.定义Service接口

复制代码
/**
     * 根据用户名查询用户信息
     * @param username 用户名
     * @return 用户信息
     */
    User selectByUserName(String username);

    /**
     * 处理用户登录
     * @param username 用户名
     * @param password 密码
     * @return 用户信息
     */
    User login(String username,String password);

4.实现Service接口

复制代码
 /**
     * 根据用户名查询用户信息
     *
     * @param username 用户名
     * @return 用户信息
     */
    @Override
    public User selectByUserName(String username) {
        // 1.非空校验
        if(StringUtils.isEmpty(username)) {
            // 打印日志
            log.warn(ResultCode.FAILED_PARAMS_VALIDATE.toString());
            // 抛出异常, 统一抛出 ApplicationException
            throw new ApplicationException(AppResult.failed(ResultCode.FAILED_PARAMS_VALIDATE));
        }

        // 返回查询结果
        return userMapper.selectByUserName(username);
    }

    /**
     * 处理用户登录
     *
     * @param username 用户名
     * @param password 密码
     * @return 用户信息
     */
    @Override
    public User login(String username, String password) {
        // 1.非空校验
        if(StringUtils.isEmpty(username) || StringUtils.isEmpty(password)) {
            // 打印日志
            log.warn(ResultCode.FAILED_PARAMS_VALIDATE.toString());
            // 抛出异常, 统一抛出 ApplicationException
            throw new ApplicationException(AppResult.failed(ResultCode.FAILED_LOGIN));
        }
        // 2.按用户名查询用户信息
        User user = selectByUserName(username);
        // 3.对查询结果进行非空校验
        if (user == null) {
            // 打印日志
            log.warn(ResultCode.FAILED_LOGIN.toString() + ", username = " + username);
            // 抛出异常, 统一抛出 ApplicationException
            throw new ApplicationException(AppResult.failed(ResultCode.FAILED_LOGIN));
        }
        // 4.对密码校验
        String encryptPassword = MD5Util.md5Salt(password, user.getSalt());
        // 5.用密文和数据库中存的用户密码进行比较
        if(!encryptPassword.equals(user.getPassword())) {
            // 打印日志
            log.warn(ResultCode.FAILED_LOGIN.toString() + ", 密码错误, username = " + username);
            // 抛出异常, 统一抛出 ApplicationException
            throw new ApplicationException(AppResult.failed(ResultCode.FAILED_LOGIN));
        }
        // 打印登录成功的日志
        log.info("[UserServiceImpl.login()]: " + username + " 登录成功");
        return user;
    }

5.单元测试

复制代码
  @Test
    void selectByUserName() {
        System.out.println(userService.selectByUserName("boy"));
    }

    @Test
    void login() {
        System.out.println(userService.login("wj", "123456"));
    }

6. Controller实现方法对外提供API接口

7.测试API接口

8.实现前端逻辑,完成前后端交互

相关推荐
醇氧5 分钟前
【Windows】优雅启动:解析一个 Java 服务的后台启动脚本
java·开发语言·windows
2401_878454535 分钟前
浏览器工作原理
前端·javascript
serendipity_hky15 分钟前
【SpringCloud | 第4篇】Gateway网关统一入口
spring·spring cloud·微服务·gateway
sunxunyong24 分钟前
doris运维命令
java·运维·数据库
菜鸟起航ing26 分钟前
Spring AI 全方位指南:从基础入门到高级实战
java·人工智能·spring
西陵38 分钟前
为什么说 AI 赋能前端开发,已经不是选择题,而是必然趋势?
前端·架构·ai编程
古城小栈42 分钟前
Docker 多阶段构建:Go_Java 镜像瘦身运动
java·docker·golang
MapGIS技术支持1 小时前
MapGIS Objects Java计算一个三维点到平面的距离
java·开发语言·平面·制图·mapgis
Coder_Boy_1 小时前
业务导向型技术日志首日记录(业务中使用的技术栈)
java·驱动开发·微服务
by__csdn2 小时前
Vue3 setup()函数终极攻略:从入门到精通
开发语言·前端·javascript·vue.js·性能优化·typescript·ecmascript