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

目录

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.实现前端逻辑,完成前后端交互

相关推荐
Csvn5 小时前
OpenSpec 详细使用教程
前端
方也_arkling6 小时前
【Java-Day08】static / final / 枚举
java·开发语言
橙淮6 小时前
Spring Bean作用域与生命周期全解析
java·spring
Chengbei116 小时前
一站式源码安全检测工具、云安全 / APP / 小程序源码敏感信息递归多层目录扫描AK、JWT、手机号、身份证等敏感信息
java·开发语言·安全·web安全·网络安全·系统安全·安全架构
llz_1126 小时前
web-第一次课后作业
java·开发语言·idea
之歆6 小时前
Day19_LESS 完全指南——从入门到工程实践
前端·css·less
秋96 小时前
Java项目运行5天左右自动宕机:系统性定位与解决方案
java·开发语言·python
小江的记录本6 小时前
【JVM虚拟机】垃圾回收GC:垃圾收集器:CMS:核心原理、回收流程、优缺点、废弃原因(附《思维导图》+《面试高频考点清单》)
java·jvm·后端·python·spring·面试·maven
DIY源码阁7 小时前
JavaSwing学生成绩管理系统 - MySQL版
java·数据库·mysql·eclipse
云水一下7 小时前
HTML5 从入门到精通:实战收官——从零搭建完整静态网站,综合运用所有知识
前端·html5