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<SysRole> sysRoles = userRoleDao.findRolesByUserId(user.getId(),user.getOrgId());
|
loginUser.setSysRoles(sysRoles);// 设置角色
|
|
Set<SysOrganization> 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;
|
}
|
|
|
|
}
|