package com.ard.work.component.forest; import com.ard.work.domain.receiver.AccessTokenReceiver; import com.ard.work.service.IArdServerInfoService; import com.dtflys.forest.exceptions.ForestRuntimeException; import com.dtflys.forest.http.ForestRequest; import com.dtflys.forest.http.ForestResponse; 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 token = ardServerService.getAccessToken(serverId); if (token == null) { return false; // 阻止请求继续 } req.addHeader("x-cid", token.getCompanyId()); req.addHeader("x-token", token.getAccessToken()); } catch (ForestRuntimeException e) { log.error("拦截器处理异常:{}", e.getMessage()); return false; } return true; } }