package com.ruoyi.sange.util;
|
|
import com.ruoyi.common.utils.StringUtils;
|
import com.ruoyi.sange.domain.SystemUser;
|
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.data.redis.core.RedisTemplate;
|
import org.springframework.stereotype.Component;
|
|
import javax.servlet.http.HttpServletRequest;
|
|
/**
|
* token验证处理
|
*
|
* @author ruoyi
|
*/
|
@Component
|
public class TokenService {
|
@Autowired
|
private RedisTemplate redisTemplate;
|
|
|
/**
|
* 获取用户身份信息
|
*
|
* @return 用户信息
|
*/
|
public SystemUser getLoginUser() {
|
SystemUser loginUser = getLoginUser(ServletUtils.getRequest());
|
if (loginUser == null) {
|
throw new RuntimeException("令牌已过期,请重新登录!");
|
}
|
return loginUser;
|
}
|
|
/**
|
* 获取用户身份信息
|
*
|
* @return 用户信息
|
*/
|
public SystemUser getLoginUser(HttpServletRequest request) {
|
// 获取请求携带的令牌
|
String token = getToken(request);
|
return getLoginUser(token);
|
}
|
|
/**
|
* 获取用户身份信息
|
*
|
* @return 用户信息
|
*/
|
public SystemUser getLoginUser(String token) {
|
SystemUser user = null;
|
try {
|
if (StringUtils.isNotEmpty(token)) {
|
String userkey = JwtUtils.getUserKey(token);
|
user = (SystemUser) redisTemplate.opsForValue().get(userkey);
|
return user;
|
}
|
} catch (Exception e) {
|
e.printStackTrace();
|
}
|
return user;
|
}
|
|
|
public String getToken(HttpServletRequest request) {
|
// 从header获取token标识
|
String token = request.getHeader(TokenConstants.AUTHENTICATION);
|
return replaceTokenPrefix(token);
|
}
|
|
/**
|
* 裁剪token前缀
|
*/
|
public String replaceTokenPrefix(String token) {
|
// 如果前端设置了令牌前缀,则裁剪掉前缀
|
if (StringUtils.isNotEmpty(token) && token.startsWith(TokenConstants.PREFIX)) {
|
token = token.replaceFirst(TokenConstants.PREFIX, "");
|
}
|
return token;
|
}
|
}
|