Springboot基本结构——登录 业务层
同理,在这里我们需要规划在这一层我们要做什么。
首先当然是对异常的处理:
例如用户名输入的密码错误,密码匹配失败,所以这里可以搞一个异常,就叫做PassWordNotMatchException,这属于运行时异常;
还有一种如用户名密码没有被找到,那么这个就是UsernameNotFoundException,也属于运行时异常。
以上两种都是业务异常。它俩都继承我们之前写好的ServiceException类。
public class UserNotFoundException extends ServiceException { public UserNotFoundException() { } public UserNotFoundException(String message) { super(message); } public UserNotFoundException(String message, Throwable cause) { super(message, cause); } public UserNotFoundException(Throwable cause) { super(cause); } public UserNotFoundException(String message, Throwable cause, boolean enableSuppression, boolean writableStackTrace) { super(message, cause, enableSuppression, writableStackTrace); } }
public class PasswordNotMatchException extends ServiceException { public PasswordNotMatchException() { super(); } public PasswordNotMatchException(String message) { super(message); } public PasswordNotMatchException(String message, Throwable cause) { super(message, cause); } public PasswordNotMatchException(Throwable cause) { super(cause); } public PasswordNotMatchException(String message, Throwable cause, boolean enableSuppression, boolean writableStackTrace) { super(message, cause, enableSuppression, writableStackTrace); } }
接下来是要设计业务层接口和抽象方法。业务层的接口我们其实已经设计好了,就在前面设计过的,就是那个IUserService。
这是一个接口,我们在里面定义一个login方法就可以了。
这个方法的返回值可以是一个User对象,因为一般来说用户登录以后会自动跳转到首页,一般在右上角会有比较详细的用户数据,这个显示是要得到User对象才能拿到的。
@Override public User login(String username, String password) { //根据用户名查询用户是否存在,如不存在则抛异常 User result = userMapper.findByUsername(username); if (result == null) { throw new UserNotFoundException("用户不存在!"); } //还要比较用户输入的密码是否正确 //先从数据库中拿到加密后的密码,这里不能直接比较,所以要先处理一下 //如何处理?拿到盐值再说。这是注册时生成的,所以直接从result对象那拿 String salt = result.getSalt(); //现在把用户输入的密码按照同样的方式加密,并与数据库中存储的密码比较 String newMd5Password = getMD5Password(password, salt); //比较 if (!newMd5Password.equals(result.getPassword())) { throw new PasswordNotMatchException("用户密码错误!"); } //还有一种异常,用户可能把账号注销了,所以需要查看is_deleted值是否为1,为1说明被注销了,此时要抛出 //用户Not found异常 if (result.getIsDeleted() == 1) { throw new UserNotFoundException("用户不存在!"); } //现在终于可以查询操作了,我们其实不需要result里面的全部属性,所以怎么办? //这么办: User user = new User(); user.setUid(result.getUid()); user.setUsername(result.getUsername()); user.setAvatar(result.getAvatar()); return user; }
数据量越小,在前后端间传递的效率也越高。
现在检测登录功能,在测试类中进行。
在test包下的测试类测试即可:
1 @Test 2 public void login() { 3 User user = userService.login("Esergrett", "66e4tw3e4378"); 4 System.out.println(user.getUsername()); 5 }
测试也是挺成功的,哟西!现在开始下一步!

浙公网安备 33010602011771号