OauthServiceImpl.java 4.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798
  1. package com.nosum.deliver.auth.service.impl;
  2. import cn.hutool.crypto.SecureUtil;
  3. import com.nosum.common.base.domain.Result;
  4. import com.nosum.common.base.domain.vo.UserSessionVO;
  5. import com.nosum.common.constant.Constants;
  6. import com.nosum.common.enums.ErrorEnum;
  7. import com.nosum.common.util.ExceptionUtil;
  8. import com.nosum.common.util.JwtUtil;
  9. import com.nosum.common.util.SessionUtil;
  10. import com.nosum.deliver.auth.domain.po.AuthToken;
  11. import com.nosum.deliver.auth.domain.po.AuthUser;
  12. import com.nosum.deliver.auth.domain.vo.AuthUserVO;
  13. import com.nosum.deliver.auth.service.OauthService;
  14. import com.nosum.system.enums.RoleEnum;
  15. import lombok.extern.slf4j.Slf4j;
  16. import org.apache.commons.lang3.StringUtils;
  17. import org.springframework.beans.factory.annotation.Autowired;
  18. import org.springframework.data.mongodb.core.MongoTemplate;
  19. import org.springframework.data.mongodb.core.query.Criteria;
  20. import org.springframework.data.mongodb.core.query.Query;
  21. import org.springframework.data.mongodb.core.query.Update;
  22. import org.springframework.stereotype.Service;
  23. import java.time.LocalDateTime;
  24. import java.time.ZoneOffset;
  25. import java.util.Collections;
  26. import java.util.Date;
  27. import java.util.Objects;
  28. @Service
  29. @Slf4j
  30. public class OauthServiceImpl implements OauthService {
  31. @Autowired
  32. private MongoTemplate mongoTemplate;
  33. @Override
  34. public Result login(AuthUserVO authUserVO) {
  35. if (authUserVO == null || StringUtils.isBlank(authUserVO.getEmail()) || StringUtils.isBlank(authUserVO.getPassword())) {
  36. ExceptionUtil.rollback(ErrorEnum.PARAM_ERROR);
  37. }
  38. // 查询管理员
  39. AuthUser authUser = mongoTemplate.findOne(Query.query(Criteria.where("roleId").is(RoleEnum.ADMIN.getRoleId()).and("email").is(authUserVO.getEmail())), AuthUser.class);
  40. if (Objects.isNull(authUser)) {
  41. ExceptionUtil.rollback(ErrorEnum.ACCOUNT_NOT_EXIST);
  42. }
  43. // 将密码加密后进行验证
  44. String psw = SecureUtil.md5(authUserVO.getPassword());
  45. ExceptionUtil.isRollback(!authUser.getPassword().equals(psw), ErrorEnum.PASSWORD_ERROR);
  46. // 生成token
  47. authUserVO.setRoles(Collections.singletonList(RoleEnum.getEnumTypeMap().get(authUser.getRoleId()).getRoleName()));
  48. authUserVO.setCreateTime(authUser.getCreateTime());
  49. String token = JwtUtil.getToken(new AuthUserVO().setPassword(authUser.getPassword()).setName(authUser.getName()).setId(authUser.getId()));
  50. authUserVO.setToken(token);
  51. // 保存登录 token
  52. mongoTemplate.insert(new AuthToken()
  53. .setToken(token)
  54. .setUserId(authUser.getId())
  55. .setExpireTime(new Date(Constants.EXPIRE_TIME + System.currentTimeMillis()).toInstant().atOffset(ZoneOffset.of("+8")).toLocalDateTime()));
  56. return Result.createWithModel(authUserVO);
  57. }
  58. @Override
  59. public Result updatePassword(AuthUserVO authUserVO) {
  60. if (StringUtils.isBlank(authUserVO.getPassword()) || StringUtils.isBlank(authUserVO.getPasswordOld())) {
  61. ExceptionUtil.rollback(ErrorEnum.PARAM_ERROR);
  62. }
  63. UserSessionVO userSessionInfo = SessionUtil.getUserSessionInfo();
  64. if (Objects.nonNull(userSessionInfo)) {
  65. AuthUser authUser = mongoTemplate.findById(userSessionInfo.getId(), AuthUser.class);
  66. if (Objects.nonNull(authUser) && !SecureUtil.md5(authUserVO.getPasswordOld()).equals(authUser.getPassword())) {
  67. ExceptionUtil.rollback(ErrorEnum.UPDATE_PASSWORD_ERROR);
  68. }
  69. mongoTemplate.updateFirst(Query.query(Criteria.where("id").is(userSessionInfo.getId())), Update.update("password", SecureUtil.md5(authUserVO.getPassword())), AuthUser.class);
  70. }
  71. return Result.createWithSuccessMessage();
  72. }
  73. @Override
  74. public Result registerAdmin(AuthUserVO authUserVO) {
  75. AuthUser authUser = mongoTemplate.findOne(Query.query(Criteria.where("roleId").is(RoleEnum.ADMIN.getRoleId())), AuthUser.class);
  76. if (authUser == null) {
  77. authUser = new AuthUser();
  78. authUser.setName(authUserVO.getEmail())
  79. .setEmail(authUserVO.getEmail())
  80. .setCreateTime(LocalDateTime.now())
  81. .setRoleId(RoleEnum.ADMIN.getRoleId())
  82. .setPassword(SecureUtil.md5(authUserVO.getPassword()));
  83. mongoTemplate.insert(authUser);
  84. } else {
  85. ExceptionUtil.rollback(ErrorEnum.ACCOUNT_EXIST);
  86. }
  87. return Result.createWithSuccessMessage();
  88. }
  89. }