package com.ard.work.component.forest; import com.ard.work.domain.receiver.AccessTokenReceiver; import com.ard.work.service.IArdServerInfoService; import com.dtflys.forest.http.ForestRequest; import com.dtflys.forest.interceptor.ForestInterceptor; import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Component; import javax.annotation.Resource; @Component @Slf4j public class TokenInterceptor implements ForestInterceptor { @Resource private IArdServerInfoService ardServerService; /** * 该方法在请求发送之前被调用, 若返回false则不会继续发送请求 * * @Param request Forest请求对象 */ @Override public boolean beforeExecute(ForestRequest req) { try { String serverId = (String) req.getVariableValue("serverId"); AccessTokenReceiver accessToken = ardServerService.getAccessToken(serverId); if (accessToken == null) { log.warn("AccessToken 为 null, serverId={}", serverId); return false; // 阻止请求继续 } req.addHeader("x-cid", accessToken.getCompanyId()); req.addHeader("x-token", accessToken.getAccessToken()); } catch (Exception e) { log.error("TokenInterceptor 处理异常:{}", e.getMessage()); return false; } return true; } }