From f04b8922283120e2bc4a476ddc302ebd3b0894e4 Mon Sep 17 00:00:00 2001
From: Helius <wangdoubleone@gmail.com>
Date: Thu, 07 Jul 2022 20:42:05 +0800
Subject: [PATCH] Merge branch 'master' of http://120.27.238.55:7000/r/farmer-cms

---
 src/main/java/com/xcong/farmer/cms/modules/system/service/Impl/CommonServiceImpl.java |   70 +++++++++++++++++++++++++++++++++++
 1 files changed, 70 insertions(+), 0 deletions(-)

diff --git a/src/main/java/com/xcong/farmer/cms/modules/system/service/Impl/CommonServiceImpl.java b/src/main/java/com/xcong/farmer/cms/modules/system/service/Impl/CommonServiceImpl.java
index 6b165e1..b4f5f17 100644
--- a/src/main/java/com/xcong/farmer/cms/modules/system/service/Impl/CommonServiceImpl.java
+++ b/src/main/java/com/xcong/farmer/cms/modules/system/service/Impl/CommonServiceImpl.java
@@ -12,9 +12,20 @@
 import com.xcong.farmer.cms.modules.system.entity.UserEntity;
 import com.xcong.farmer.cms.modules.system.mapper.UserMapper;
 import com.xcong.farmer.cms.modules.system.service.ICommonService;
+import com.xcong.farmer.cms.modules.system.util.CaptchaUtil;
+import com.xcong.farmer.cms.modules.system.util.LoginUserUtil;
+import com.xcong.farmer.cms.modules.system.util.UUIDUtil;
 import com.xcong.farmer.cms.utils.RedisUtils;
+import java.util.concurrent.TimeUnit;
 import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.data.redis.core.RedisTemplate;
+import org.springframework.data.redis.core.ValueOperations;
+import org.springframework.security.core.context.SecurityContextHolder;
 import org.springframework.stereotype.Service;
+
+import java.io.IOException;
 import java.util.HashMap;
 import java.util.Map;
 
@@ -36,14 +47,42 @@
     private ApplicationProperties applicationProperties;
     @Resource
     private SecurityProperties securityProperties;
+    @Autowired
+    private RedisTemplate<String, Object> redisTemplate;
+    @Autowired
+    private UUIDUtil uuidUtil;
+    @Autowired
+    private CaptchaUtil captchaUtil;
+    //从SpringBoot的配置文件中取出过期时间
+    @Value("${server.servlet.session.timeout}")
+    private Integer timeout;
 
     @Override
     public Result login(AdminLoginDto adminLoginDto) {
+
+        //根据前端传回的token在redis中找对应的value
+        ValueOperations<String, Object> valueOperations = redisTemplate.opsForValue();
+        String codeToken = adminLoginDto.getCodeToken();
+        String codeValue = adminLoginDto.getCodeValue();
+        if (redisTemplate.hasKey(codeToken)) {
+            //验证通过, 删除对应的key
+            if (valueOperations.get(codeToken).equals(codeValue)) {
+                redisTemplate.delete(codeToken);
+            } else {
+                return Result.fail("验证码不正确");
+            }
+        } else {
+            return Result.fail("验证码已过期");
+        }
         String username = adminLoginDto.getUsername();
         String password = adminLoginDto.getPassword();
         UserEntity userEntity = userMapper.selectByUserNameAndPassword(username, SecureUtil.md5(password));
         if(ObjectUtil.isEmpty(userEntity)){
             return Result.fail("请输入正确的账号和密码");
+        }
+        Integer status = userEntity.getStatus();
+        if(UserEntity.STATUS_DISABLED.equals(status)){
+            return Result.fail("账号禁止登陆,请联系管理员");
         }
         //生成UUID作为token
         String token = IdUtil.simpleUUID();
@@ -69,6 +108,37 @@
         return Result.ok("登录成功", authInfo);
     }
 
+    @Override
+    public Result memberLogout() {
+        Long id = LoginUserUtil.getLoginUser().getId();
+
+        String redisMember = AppContants.APP_LOGIN_PREFIX + id;
+        String token = redisUtils.getString(redisMember);
+        redisUtils.del(AppContants.APP_LOGIN_PREFIX + token);
+        SecurityContextHolder.clearContext();
+        return Result.ok("退出成功");
+    }
+
+    @Override
+    public Map<String, Object> createToken(String captcha) {
+        //生成一个token
+        String key = uuidUtil.getUUID32();
+        //生成验证码对应的token  以token为key  验证码为value存在redis中
+        ValueOperations<String, Object> valueOperations = redisTemplate.opsForValue();
+        valueOperations.set(key, captcha);
+        //设置验证码过期时间
+        redisTemplate.expire(key, timeout, TimeUnit.MINUTES);
+        Map<String, Object> map = new HashMap<>();
+        map.put("token", key);
+        map.put("expire", timeout);
+        return map;
+    }
+
+    @Override
+    public Result captchaCreator() throws IOException {
+        return captchaUtil.catchaImgCreator();
+    }
+
     public String generateAsaToken(String token) {
         RSA rsa = new RSA(null, securityProperties.getPublicKey());
         return rsa.encryptBase64(token + "_" + System.currentTimeMillis(), KeyType.PublicKey);

--
Gitblit v1.9.1