1 public User login(String username, String password) throws UserNotExistException, PasswordException { 2 User user = userDao.findUserByUserName(username); 3 if (user == null) { 4 LOGGER.debug("登录用户不存在:{}", username); 5 throw new UserNotExistException(username); 6 } 7 if (!user.getPwd().equals(password)) { 8 LOGGER.debug("登录密码错误:{}", username); 9 throw new PasswordException(username); 10 } 11 LoginLog log = new LoginLog(); 12 log.setUserid(user.getId()); 13 log.setLoginTime(new Date()); 14 loginLogDao.add(log); 15 LOGGER.info("登录成功:{}", username); 16 return user; 17 }
合适,不过password是存的明文么。
这个可能不是关注的点,主要问题是想了解这种处理业务的方式是否合理?因为一般都是Service提供matchUser,loginSuccess来处理的登录业务。
@♂蔚蓝天空☆: 合适,在Service中,不合理的输入将不会得到正确的结果。通知调用者的方式就是异常。
你这个方法是判断用户是否登录成功的话,肯定只能返回一个布尔类型,你返回个user作甚?
其实是一次登录操作,不是判断用户是否登录成功,所以不知道这样写否合适。不返回User的话怎么去获取用户信息呢?
throw exception 个人觉得是正常的一种中断业务逻辑的方式
那比如现在想增加功能:在登录的时候记录登录IP,这时怎么处理?
@♂蔚蓝天空☆: 你需要AOP或者提供一个事件,前者通过拦截登录方法,后者提供一个观察者。
@长蘑菇星人: 嗯......赞!感觉说得非常在理,那是否LoginLog完全可以不在login里处理啦?
@♂蔚蓝天空☆: 没错。无关紧要的东西不要和业务掺杂在一起。
@长蘑菇星人: 棒棒的!一下感觉上面的login有点过程化了。去除了LoginLog更能体现“单一职责”。
很正常的