自定义异常的使用示例

自定义异常处理与登录逻辑实现

1.创建自定义异常类: 声明一个class, 继承 Exception 或者RuntimeException

/**
 * 登录失败异常
 */
public class LoginFailException extends Exception {

    public LoginFailException() {
        super("用户名或密码错误!");
    }
}

2. 抛出异常

 public ItripUser login(ItripUser user, String agent) throws LoginFailException, Exception {


        //查询登录用户
        List<ItripUser> userList = userMapper.select(user);
        /*判断,用户名或密码是否正确 */
        if (userList.size() != 1)
            throw new LoginFailException();
        //验证是否已经登录
        boolean loginState = tokenService.checkLoginState(userList.get(0), agent);

        /*登录状态*/
        if (loginState){
            //不定长字符串
            StringBuilder login = new StringBuilder(prefix_login);
            //设备信息
            String agentMsg = UserAgentUtil.CheckAgent(agent);

            if(agentMsg.equals("PC")){
                login.append("PC");
            }else if(agentMsg.equals("ANDROID")){
                login.append("ANDROID");
            }else if(agentMsg.equals("IOS")){
                login.append("IOS");
            }

            //用户ID
            login.append("-" + userList.get(0).getId());

            //获取上一次登录时的token
            String tokenString = redisUtil.getString(login.toString());

            //将token有效时间修改为1分钟
            redisUtil.setString(tokenString, "", 60);
        }

        return userList.get(0);
    }

3. 在controller 中处理异常

 @PostMapping("dologin")
    public Dto login(String name,String password, @RequestHeader("user-agent") String agent){
        System.out.println("登录");
        //创建用户对象
        ItripUser user=new ItripUser();
        //密码
        user.setUserPassword(password.trim());
        //登录账号
        user.setUserCode(name.trim());

        //将密码加密
        user.setUserPassword(MD5.getMd5(user.getUserPassword(),32));

        //打印参数
        System.out.println("loginUser:"+user);
        try {
            //登录
            ItripUser loginInfo = authService.login(user, agent);

            //用户创建日期
            loginInfo.setCreationDate(new Date());
            //生成token
            Token token = tokenService.generate(loginInfo, agent);
            //保存
            tokenService.save(token.getToken(), loginInfo, agent);

            return DtoUtil.returnSuccess(token);
        } catch (LoginFailException e) {
            e.printStackTrace();
            //账号或密码错误
            return DtoUtil.returnFail(e.getMessage(),"30002");
        } catch (Exception e) {
            e.printStackTrace();
            return DtoUtil.returnFail("登录失败!","30002");
        }

    }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值