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.member.entity.MemberEntity;
|
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.modules.system.util.LoginUserUtil;
|
import com.xcong.farmer.cms.utils.MessageSourceUtils;
|
import com.xcong.farmer.cms.utils.RedisUtils;
|
import lombok.extern.slf4j.Slf4j;
|
import org.springframework.security.core.context.SecurityContextHolder;
|
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);
|
}
|
|
@Override
|
public Result memberLogout() {
|
Long id = LoginUserUtil.getLoginUser().getId();
|
//获取用户ID
|
UserEntity userEntity = userMapper.selectById(id);
|
if (ObjectUtil.isEmpty(userEntity)) {
|
return Result.fail("用户不存在");
|
}
|
|
String redisMember = AppContants.APP_LOGIN_PREFIX + userEntity.getId();
|
String token = redisUtils.getString(redisMember);
|
redisUtils.del(AppContants.APP_LOGIN_PREFIX + token);
|
SecurityContextHolder.clearContext();
|
return Result.ok("退出成功");
|
}
|
|
public String generateAsaToken(String token) {
|
RSA rsa = new RSA(null, securityProperties.getPublicKey());
|
return rsa.encryptBase64(token + "_" + System.currentTimeMillis(), KeyType.PublicKey);
|
}
|
}
|