使用断言Assert封装一些判断&一般登录流程开发,业务单元化,异常在控制层处理

本文介绍了一种使用断言工具AssertUtil进行参数校验的登录流程实现,包括用户名和密码非空判断、用户查询、密码校验等步骤。在服务层,异常被直接抛出并在控制器层捕获处理,返回相应的状态码和信息。该方法有助于确保登录过程的稳定性和安全性。
摘要由CSDN通过智能技术生成

使用断言Assert封装一些判断&一般登录流程开发,业务单元化,异常在控制层处理

断言工具

public class AssertUtil {


    public  static void isTrue(Boolean flag, String msg){
        if(flag){
            throw  new RuntimeException(msg);
        }
    }

}

登录流程

/**
* ⽤户登录
*
1. 验证参数
*
姓名 ⾮空判断
*
密码 ⾮空判断
*
2. 根据⽤户名,查询⽤户对象
*
3. 判断⽤户是否存在
*
⽤户对象为空,记录不存在,⽅法结束
*
4. ⽤户对象不为空
*
⽤户存在,校验密码
*
密码不正确,⽅法结束
*
5. 密码正确
*
⽤户登录成功,返回⽤户的相关信息 (定义 UserModel 类,返回⽤户某些信息)
*/

登录实现,各步骤模块化

/**
* ⽤户登录
* @param userName
* @param userPwd
* @return
*/
public UserModel userLogin(String userName, String userPwd) {
    // 1. 验证参数
    checkLoginParams(userName, userPwd);
    // 2. 根据⽤户名,查询⽤户对象
    User user = userMapper.queryUserByUserName(userName);
    // 3. 判断⽤户是否存在 (⽤户对象为空,记录不存在,⽅法结束)
    AssertUtil.isTrue(null == user, "⽤户不存在或已注销!");
    // 4. ⽤户对象不为空(⽤户存在,校验密码。密码不正确,⽅法结束)
    checkLoginPwd(userPwd, user.getUserPwd());
    // 5. 密码正确(⽤户登录成功,返回⽤户的相关信息)
    return buildUserInfo(user);
}

/**
* 构建返回的⽤户信息
* @param user
* @return
*/
private UserModel buildUserInfo(User user) { UserModel userModel = new UserModel();
    // 设置⽤户信息
    userModel.setUserId(user.getId());
    userModel.setUserName(user.getUserName());
    userModel.setTrueName(user.getTrueName());
    return userModel; 
}


/**
* 验证登录密码
* @param userPwd 前台传递的密码
* @param upwd 数据库中查询到的密码
* @return
*/
private void checkLoginPwd(String userPwd, String upwd) {
    // 数据库中的密码是经过加密的,将前台传递的密码先加密,再与数据库中的密码作⽐较
    userPwd = Md5Util.encode(userPwd);
    // ⽐较密码
    AssertUtil.isTrue(!userPwd.equals(upwd), "⽤户密码不正确!");
}
/**
* 验证⽤户登录参数
* @param userName
* @param userPwd
*/
private void checkLoginParams(String userName, String userPwd) {
    // 判断姓名
    AssertUtil.isTrue(StringUtils.isBlank(userName), "⽤户姓名不能为空!");
    // 判断密码
    AssertUtil.isTrue(StringUtils.isBlank(userPwd), "⽤户密码不能为空!");
}

service层直接将异常抛出,由controller进行进一步的处理

/**
* ⽤户登录
* @param userName
* @param userPwd
* @return
*/
@PostMapping("user/login")
@ResponseBody
public ResultInfo userLogin (String userName, String userPwd) {
     ResultInfo resultInfo = new ResultInfo();
     // 通过 try catch 捕获 Service 层抛出的异常
     try {
         // 调⽤Service层的登录⽅法,得到返回的⽤户对象
         UserModel userModel = userService.userLogin(userName, userPwd);
        /**
        * 登录成功后,有两种处理:
        * 1. 将⽤户的登录信息存⼊ Session ( 问题:重启服务器,Session 失效,客户
        端需要重复登录 )
        * 2. 将⽤户信息返回给客户端,由客户端(Cookie)保存
        */
        // 将返回的UserModel对象设置到 ResultInfo 对象中
        resultInfo.setResult(userModel);
    } catch (ParamsException e) { 
        // ⾃定义异常
        e.printStackTrace();
        // 设置状态码和提示信息
        resultInfo.setCode(e.getCode());
        resultInfo.setMsg(e.getMsg());
    } catch (Exception e) {
        e.printStackTrace();
        resultInfo.setCode(500);
        resultInfo.setMsg("操作失败!");
    }
    return resultInfo; 
    }
}

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值