package com.bwie.service.impl; import com.alibaba.fastjson.JSON; import com.alibaba.nacos.common.utils.UuidUtils; import com.bwie.common.constants.Constants; import com.bwie.common.constants.JwtConstants; import com.bwie.common.constants.TokenConstants; import com.bwie.common.domain.User; import com.bwie.common.domain.request.UserRequest; import com.bwie.common.domain.response.JwtResponse; import com.bwie.common.exception.auth.AuthException; import com.bwie.common.result.Result; import com.bwie.common.utils.JwtUtils; import com.bwie.user.feign.RemoteUserService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.data.redis.core.StringRedisTemplate; import org.springframework.stereotype.Service; import javax.servlet.http.HttpServletRequest; import java.util.HashMap; import java.util.concurrent.TimeUnit; /** * @author gxb * @description TODO * @date 2024-01-03 10:05 */ @Service public class AuthServicelmpl implements AuthService{ @Autowired private RemoteUserService remoteUserService; @Autowired private StringRedisTemplate redisTemplate; @Autowired private HttpServletRequest request; /** * 登录 * @param userRequest * @return */ @Override public Result login(UserRequest userRequest) { Result userData = remoteUserService.findName(userRequest.getUsername()); if (userData.getCode()== Constants.ERROR){ throw new AuthException(userData.getMsg()); } User user = userData.getData(); if (null==user){ throw new AuthException("用户名不存在,请重新登录!"); } if (!user.getPassword().equals(userRequest.getPassword())){ throw new AuthException("密码错误,请重新检查输入!"); } JwtResponse token = this.getToken(user); if (1==user.getRole()){ return Result.success(token,"管理员登录成功"); } if (2==user.getRole()){ return Result.success(token,"审核员登录成功"); } return Result.success(token,"业务员登录成功"); } @Override public Result lout() { String token = request.getHeader(TokenConstants.TOKEN); String userKey = JwtUtils.getUserKey(token); redisTemplate.delete(TokenConstants.LOGIN_TOKEN_KEY+userKey); return Result.success("chenggg"); } /** * 生成token * @param user * @return */ private JwtResponse getToken(User user){ HashMap map = new HashMap<>(); String userKey = UuidUtils.generateUuid().replaceAll("-", ""); map.put(JwtConstants.USER_KEY,userKey); String token = JwtUtils.createToken(map); redisTemplate.opsForValue().set(TokenConstants.LOGIN_TOKEN_KEY+userKey, JSON.toJSONString(user),15, TimeUnit.MINUTES); return new JwtResponse(token); } }