| | |
| | | import java.util.Map; |
| | | import java.util.concurrent.TimeUnit; |
| | | import javax.servlet.http.HttpServletRequest; |
| | | |
| | | import com.ruoyi.common.constant.ResultConstants; |
| | | import com.ruoyi.common.core.domain.model.InstitutionUser; |
| | | import com.ruoyi.common.exception.BusinessException; |
| | | import io.swagger.models.auth.In; |
| | | import org.slf4j.Logger; |
| | | import org.slf4j.LoggerFactory; |
| | | import org.springframework.beans.factory.annotation.Autowired; |
| | |
| | | @Value("${token.expireTime}") |
| | | private int expireTime; |
| | | |
| | | //三方头自定义标识 |
| | | @Value("${threeToken.header}") |
| | | private String threeInHeader; |
| | | //三方密钥 |
| | | @Value("${threeToken.secret}") |
| | | private String threeInsecret; |
| | | |
| | | //三方token过期时间 |
| | | @Value("${threeToken.expireTime}") |
| | | private int threeInExpireTime; |
| | | |
| | | |
| | | |
| | | |
| | | protected static final long MILLIS_SECOND = 1000; |
| | | |
| | | protected static final long MILLIS_MINUTE = 60 * MILLIS_SECOND; |
| | | |
| | | protected static final long MILLIS_HOUR = 60 * MILLIS_MINUTE; |
| | | |
| | | protected static final long MILLIS_DAY = 24 * MILLIS_HOUR; |
| | | |
| | | private static final Long MILLIS_MINUTE_TEN = 20 * 60 * 1000L; |
| | | |
| | | |
| | | |
| | | @Autowired |
| | | private RedisCache redisCache; |
| | |
| | | return null; |
| | | } |
| | | |
| | | |
| | | /** |
| | | * 设置用户身份信息 |
| | | */ |
| | |
| | | refreshToken(loginUser); |
| | | } |
| | | } |
| | | |
| | | |
| | | |
| | | /** |
| | | * 删除用户身份信息 |
| | |
| | | String userKey = getTokenKey(loginUser.getToken()); |
| | | redisCache.setCacheObject(userKey, loginUser, expireTime, TimeUnit.MINUTES); |
| | | } |
| | | |
| | | |
| | | |
| | | /** |
| | | * 设置用户代理信息 |
| | |
| | | { |
| | | return CacheConstants.LOGIN_TOKEN_KEY + uuid; |
| | | } |
| | | |
| | | /** |
| | | * 三方机构校验tokenKey |
| | | * @param uuid |
| | | * @return |
| | | */ |
| | | private String getThreeInTokenKey(String uuid){ |
| | | return CacheConstants.THREE_INSTITUTION_TOKEN_KEY + uuid; |
| | | } |
| | | |
| | | |
| | | /** |
| | | * 获取三方用户身份信息 |
| | | * |
| | | * @return 用户信息 |
| | | */ |
| | | public InstitutionUser getThreeInUser(HttpServletRequest request) |
| | | { |
| | | // 获取请求携带的令牌 |
| | | String token = request.getHeader(threeInHeader); |
| | | if (StringUtils.isNotEmpty(token)) |
| | | { |
| | | try |
| | | { |
| | | // 解析对应的权限以及用户信息 |
| | | String userKey = getThreeInTokenKey(token); |
| | | InstitutionUser institutionUser = redisCache.getCacheObject(userKey); |
| | | return institutionUser; |
| | | } |
| | | catch (Exception e) |
| | | { |
| | | log.error("获取三方用户信息异常'{}'", e.getMessage()); |
| | | } |
| | | } else { |
| | | throw new BusinessException(ResultConstants.ACCESS_TOKEN_LOSE); |
| | | } |
| | | return null; |
| | | } |
| | | |
| | | /** |
| | | * 设置三方用户身份信息 |
| | | */ |
| | | public void setInstitutionUser(InstitutionUser institutionUser) |
| | | { |
| | | if (StringUtils.isNotNull(institutionUser) && StringUtils.isNotEmpty(institutionUser.getToken())) |
| | | { |
| | | refreshThreeInToken(institutionUser); |
| | | } |
| | | } |
| | | |
| | | /** |
| | | * 刷新三方令牌有效期 |
| | | * |
| | | * @param institutionUser 验证信息 |
| | | */ |
| | | public void refreshThreeInToken(InstitutionUser institutionUser) |
| | | { |
| | | // 根据uuid将机构缓存 |
| | | String userKey = getThreeInTokenKey(institutionUser.getToken()); |
| | | institutionUser.setExpireTime(System.currentTimeMillis() + threeInExpireTime * MILLIS_DAY); |
| | | redisCache.setCacheObject(userKey, institutionUser, threeInExpireTime, TimeUnit.DAYS); |
| | | } |
| | | |
| | | /** |
| | | * 创建三方机构令牌 |
| | | * |
| | | * @param institutionUser 用户信息 |
| | | * @return 令牌 |
| | | */ |
| | | public String createThreeInToken(InstitutionUser institutionUser) |
| | | { |
| | | String token = IdUtils.fastUUID(); |
| | | institutionUser.setToken(token); |
| | | setThreeInAgent(institutionUser); |
| | | refreshThreeInToken(institutionUser); |
| | | return token; |
| | | } |
| | | |
| | | |
| | | /** |
| | | * 设置用户代理信息 |
| | | * |
| | | * @param institutionUser 登录信息 |
| | | */ |
| | | public void setThreeInAgent(InstitutionUser institutionUser) |
| | | { |
| | | UserAgent userAgent = UserAgent.parseUserAgentString(ServletUtils.getRequest().getHeader("User-Agent")); |
| | | String ip = IpUtils.getIpAddr(); |
| | | institutionUser.setIpaddr(ip); |
| | | institutionUser.setLocation(AddressUtils.getRealAddressByIP(ip)); |
| | | institutionUser.setBrowser(userAgent.getBrowser().getName()); |
| | | institutionUser.setOs(userAgent.getOperatingSystem().getName()); |
| | | } |
| | | |
| | | /** |
| | | * 验证令牌有效期,相差不足20分钟,自动刷新缓存 |
| | | * |
| | | * @param institutionUser |
| | | * @return |
| | | */ |
| | | public void verifyThreeInToken(InstitutionUser institutionUser) |
| | | { |
| | | long expireTime = institutionUser.getExpireTime(); |
| | | long currentTime = System.currentTimeMillis(); |
| | | if (expireTime - currentTime <= MILLIS_MINUTE_TEN) |
| | | { |
| | | refreshThreeInToken(institutionUser); |
| | | } |
| | | } |
| | | |
| | | } |