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");
}
}