package com.cloud.user.service.impl; import com.alibaba.fastjson.JSONObject; import com.cloud.common.exception.ApplicationException; import com.cloud.common.utils.RequestUtil; import com.cloud.model.common.TokenInfo; import com.cloud.model.sys.AppUser; import com.cloud.model.sys.LoginAppUser; import com.cloud.model.sys.SysOrganization; import com.cloud.model.sys.SysRole; import com.cloud.user.dao.UserOrgDao; import com.cloud.user.dao.UserRoleDao; import com.cloud.user.service.TokenService; import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.StringUtils; import org.springframework.beans.BeanUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.data.redis.core.StringRedisTemplate; import org.springframework.stereotype.Component; import org.springframework.stereotype.Service; import java.util.Set; import java.util.UUID; import java.util.concurrent.TimeUnit; @Slf4j @Component @Service public class TokenServiceImpl implements TokenService { private static final String CACHE_CLIENT_KEY = "LOGIN_USER"; @Autowired private StringRedisTemplate stringRedisTemplate; @Autowired private UserRoleDao userRoleDao; @Autowired private UserOrgDao userOrgDao; @Override public String getToken(AppUser user) { //LoginAppUser loginUser = (LoginAppUser) user; LoginAppUser loginUser = new LoginAppUser(); BeanUtils.copyProperties(user, loginUser); Set sysRoles = userRoleDao.findRolesByUserId(user.getId(),user.getOrgId()); loginUser.setSysRoles(sysRoles);// 设置角色 Set sysOrgs= userOrgDao.findUserOrgsName(user.getOrgId()); loginUser.setSysOrgs(sysOrgs);//设置组织信息 String token = UUID.randomUUID().toString(); //將token 及用戶信息存入redis stringRedisTemplate.opsForValue().set(token,JSONObject.toJSONString(loginUser),TokenInfo.EXPRISE_IN,TimeUnit.SECONDS); return token; } @Override public void refreshUserToken(String token) { try { stringRedisTemplate.expire(token, 18800,TimeUnit.SECONDS); // wp 注释 12-04 用户刷新 数值 18800 }catch(Exception e){ log.error(e.getMessage()); } } @Override public void loginOff(String token) { if(StringUtils.isNotEmpty(token)) { stringRedisTemplate.delete(token); } } @Override public LoginAppUser currentUser() { // 请求参数中包含access_token参数 String token = RequestUtil.getTokenByParam(); if(token == null){ throw new ApplicationException("not found token"); } String s_user = stringRedisTemplate.opsForValue().get(token); LoginAppUser user = JSONObject.parseObject(s_user, LoginAppUser.class); return user; } @Override public LoginAppUser currentUserByToken(String token) { String s_user = stringRedisTemplate.opsForValue().get(token); LoginAppUser user = JSONObject.parseObject(s_user, LoginAppUser.class); return user; } }