diff --git a/src/main/java/cn/celess/blog/enmu/ResponseEnum.java b/src/main/java/cn/celess/blog/enmu/ResponseEnum.java index 6c98fa5..919fa5f 100644 --- a/src/main/java/cn/celess/blog/enmu/ResponseEnum.java +++ b/src/main/java/cn/celess/blog/enmu/ResponseEnum.java @@ -34,6 +34,7 @@ public enum ResponseEnum { PWD_NOT_SAME(3602, "新密码与原密码不相同"), LOGIN_EXPIRED(3700, "登陆过期"), LOGOUT(3710, "账户已注销"), + CAN_NOT_USE(3711, "账户不可用"), PWD_WRONG(3800, "密码不正确"), JWT_EXPIRED(3810, "Token过期"), diff --git a/src/main/java/cn/celess/blog/exception/MyException.java b/src/main/java/cn/celess/blog/exception/MyException.java index 6046d4f..a681356 100644 --- a/src/main/java/cn/celess/blog/exception/MyException.java +++ b/src/main/java/cn/celess/blog/exception/MyException.java @@ -22,6 +22,12 @@ public class MyException extends RuntimeException { this.code = e.getCode(); } + public MyException(ResponseEnum e, Object result) { + super(e.getMsg()); + this.code = e.getCode(); + this.result = result; + } + public MyException(ResponseEnum e, String msg) { super(msg + e.getMsg()); this.code = e.getCode(); diff --git a/src/main/java/cn/celess/blog/service/serviceimpl/UserServiceImpl.java b/src/main/java/cn/celess/blog/service/serviceimpl/UserServiceImpl.java index fd8ea2d..680f071 100644 --- a/src/main/java/cn/celess/blog/service/serviceimpl/UserServiceImpl.java +++ b/src/main/java/cn/celess/blog/service/serviceimpl/UserServiceImpl.java @@ -2,6 +2,7 @@ package cn.celess.blog.service.serviceimpl; import cn.celess.blog.enmu.ResponseEnum; import cn.celess.blog.enmu.RoleEnum; +import cn.celess.blog.enmu.UserAccountStatusEnum; import cn.celess.blog.entity.Response; import cn.celess.blog.entity.User; import cn.celess.blog.entity.model.PageData; @@ -99,6 +100,12 @@ public class UserServiceImpl implements UserService { if (!RegexUtil.pwdMatch(loginReq.getPassword())) { throw new MyException(ResponseEnum.PARAMETERS_PWD_ERROR); } + + User user = userMapper.findByEmail(loginReq.getEmail()); + if (user.getStatus() != UserAccountStatusEnum.NORMAL.getCode()) { + throw new MyException(ResponseEnum.CAN_NOT_USE, UserAccountStatusEnum.get(user.getStatus())); + } + //获取redis缓存中登录失败次数 String s = redisUtil.get(loginReq.getEmail() + "-passwordWrongTime"); if (s != null) { @@ -106,8 +113,7 @@ public class UserServiceImpl implements UserService { throw new MyException(ResponseEnum.LOGIN_LATER, loginReq.getEmail()); } } - User user = null; - user = userMapper.findByEmail(loginReq.getEmail()); + String token = null; // 密码比对 if (user == null) { diff --git a/src/test/java/cn/celess/blog/service/UserServiceTest.java b/src/test/java/cn/celess/blog/service/UserServiceTest.java index a273bbb..04661eb 100644 --- a/src/test/java/cn/celess/blog/service/UserServiceTest.java +++ b/src/test/java/cn/celess/blog/service/UserServiceTest.java @@ -1,9 +1,15 @@ package cn.celess.blog.service; import cn.celess.blog.BaseTest; +import cn.celess.blog.enmu.ResponseEnum; import cn.celess.blog.enmu.UserAccountStatusEnum; +import cn.celess.blog.entity.User; import cn.celess.blog.entity.model.PageData; import cn.celess.blog.entity.model.UserModel; +import cn.celess.blog.entity.request.LoginReq; +import cn.celess.blog.exception.MyException; +import cn.celess.blog.mapper.UserMapper; +import cn.celess.blog.util.MD5Util; import org.junit.Test; import org.springframework.beans.factory.annotation.Autowired; @@ -12,6 +18,8 @@ import static org.junit.Assert.*; public class UserServiceTest extends BaseTest { @Autowired UserService userService; + @Autowired + UserMapper userMapper; @Test public void getUserList() { @@ -27,4 +35,39 @@ public class UserServiceTest extends BaseTest { assertTrue(userList.getList().stream().anyMatch(userModel -> userModel.getStatus().getCode() == UserAccountStatusEnum.LOCKED.getCode())); assertTrue(userList.getList().stream().anyMatch(userModel -> userModel.getStatus().getCode() == UserAccountStatusEnum.DELETED.getCode())); } + + @Test + public void testLogin() { + // 测试账户 被锁 被删除 登录 + String email = randomStr(5) + "@celess.cn"; + String pwd = MD5Util.getMD5("123456789"); + User user = new User(email, pwd); + userMapper.addUser(user); + assertNotNull(user.getId()); + + user = userMapper.findByEmail(email); + LoginReq loginReq = new LoginReq(email, "123456789", false); + UserModel login = userService.login(loginReq); + assertEquals(UserAccountStatusEnum.NORMAL, login.getStatus()); + + userMapper.lock(user.getId()); + try { + userService.login(loginReq); + fail("测试登录被锁账户 失败!"); + } catch (MyException e) { + assertEquals(ResponseEnum.CAN_NOT_USE.getCode(), e.getCode()); + assertEquals(UserAccountStatusEnum.LOCKED, e.getResult()); + } + + userMapper.delete(user.getId()); + try { + userService.login(loginReq); + fail("测试登录被删除账户 失败!"); + } catch (MyException e) { + assertEquals(ResponseEnum.CAN_NOT_USE.getCode(), e.getCode()); + assertEquals(UserAccountStatusEnum.DELETED, e.getResult()); + } + + + } } \ No newline at end of file