package com.fdkankan.manage.service.impl; import cn.dev33.satoken.stp.SaLoginConfig; import cn.dev33.satoken.stp.StpUtil; import cn.hutool.extra.servlet.ServletUtil; import com.alibaba.fastjson.JSONObject; import com.fdkankan.manage.common.ResultCode; import com.fdkankan.common.util.Base64Converter; import com.fdkankan.common.util.SecurityUtil; import com.fdkankan.manage.common.RedisKeyUtil; import com.fdkankan.manage.common.ResultCode; import com.fdkankan.manage.exception.BusinessException; import com.fdkankan.manage.service.ISysUserService; import com.fdkankan.manage.service.IUserService; import com.fdkankan.manage.vo.request.ManageLoginRequest; import com.fdkankan.manage.vo.response.ManageLoginResponse; import com.fdkankan.redis.constant.RedisKey; import com.fdkankan.redis.util.RedisUtil; import org.apache.commons.lang3.StringUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import javax.servlet.http.HttpServletRequest; @Service public class ManageService { @Autowired IUserService userService; @Autowired RedisUtil redisUtil; public ManageLoginResponse login(String ip,String userName, String password) { if(StringUtils.isBlank(userName) || StringUtils.isBlank(password)){ throw new BusinessException(ResultCode.MISSING_REQUIRED_PARAMETERS); } //对前端传的密码解密 String passwordMd5 = Base64Converter.decode(Base64Converter.subText(password)); ManageLoginResponse result = userService.getUserByUserNameAndPassword(userName,passwordMd5); if(result == null){ throw new BusinessException(ResultCode.PASSWORD_ERROR); } if(result.getStatus() == 0){ throw new BusinessException(ResultCode.USERNAME_ERROR); } StpUtil.login(result.getId(), SaLoginConfig .setExtra("userId",result.getId()) .setExtra("isAdmin",1) .setExtra("userName",result.getUserName()) .setExtra("nickName",result.getNickName())); result.setToken(StpUtil.getTokenValue()); redisUtil.set(String.format(RedisKeyUtil.loginToken ,result.getToken()), JSONObject.toJSONString(result), 2 * 60 * 60); redisUtil.set(RedisKeyUtil.loginTokenUser+userName, result.getToken(),2 * 60 * 60); return result; } public void logout() { redisUtil.del(String.format(RedisKeyUtil.loginToken ,StpUtil.getTokenValue())); StpUtil.logout(); } }