From 49dbcdadd860b7613063ee618fbe38a0593d5bd9 Mon Sep 17 00:00:00 2001
From: Helius <wangdoubleone@gmail.com>
Date: Mon, 11 Jul 2022 15:45:29 +0800
Subject: [PATCH] fix
---
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