xiaoyong931011
2022-05-27 39de91481b6e9f2e7bca5c09396edbc9b41a6afc
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
package com.xcong.farmer.cms.modules.system.service.Impl;
 
import cn.hutool.crypto.SecureUtil;
import cn.hutool.crypto.asymmetric.KeyType;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.xcong.farmer.cms.common.contants.AppContants;
import com.xcong.farmer.cms.common.response.Result;
import com.xcong.farmer.cms.configurations.properties.ApplicationProperties;
import com.xcong.farmer.cms.configurations.properties.SecurityProperties;
import com.xcong.farmer.cms.modules.system.dto.AdminLoginDto;
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.utils.RedisUtils;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;
import java.util.HashMap;
import java.util.Map;
 
import javax.annotation.Resource;
import cn.hutool.core.util.StrUtil;
import cn.hutool.core.util.IdUtil;
import cn.hutool.core.util.ObjectUtil;
import cn.hutool.crypto.asymmetric.RSA;
 
@Service
@Slf4j
public class CommonServiceImpl extends ServiceImpl<UserMapper, UserEntity> implements ICommonService {
 
    @Resource
    private UserMapper userMapper;
    @Resource
    private RedisUtils redisUtils;
    @Resource
    private ApplicationProperties applicationProperties;
    @Resource
    private SecurityProperties securityProperties;
 
    @Override
    public Result login(AdminLoginDto adminLoginDto) {
        String username = adminLoginDto.getUsername();
        String password = adminLoginDto.getPassword();
        UserEntity userEntity = userMapper.selectByUserNameAndPassword(username, SecureUtil.md5(password));
        if(ObjectUtil.isEmpty(userEntity)){
            return Result.fail("请输入正确的账号和密码");
        }
        //生成UUID作为token
        String token = IdUtil.simpleUUID();
        String redisToken = AppContants.APP_LOGIN_PREFIX + token;
        String redisMember = AppContants.APP_LOGIN_PREFIX + userEntity.getId();
 
        if (StrUtil.isNotBlank(redisUtils.getString(redisMember))) {
            redisUtils.del(AppContants.APP_LOGIN_PREFIX + redisUtils.getString(redisMember));
        }
        redisUtils.set(redisToken, JSONObject.toJSONString(userEntity), 3000L);
        redisUtils.set(redisMember, token);
 
        Map<String, Object> authInfo = new HashMap<>();
        // 开启debug模式,则将加密后的token返回
        if (applicationProperties.isDebug()) {
            authInfo.put("token", token);
            authInfo.put("rsaToken", AppContants.TOKEN_START_WITH + generateAsaToken(token));
            authInfo.put("user", userEntity);
        } else {
            authInfo.put("token", token);
            authInfo.put("user", userEntity);
        }
        return Result.ok("登录成功", authInfo);
    }
 
    public String generateAsaToken(String token) {
        RSA rsa = new RSA(null, securityProperties.getPublicKey());
        return rsa.encryptBase64(token + "_" + System.currentTimeMillis(), KeyType.PublicKey);
    }
}