场景:
公司内部服务通过网关调用,使用统一的token认证,每个项目都有唯一的token配置,通过对发起请求时的拦截检测是否携带token,给出相应提示或抛出异常,目前开发中运用的HTTP工具主要为HttpClient和RestTemplate两种。
HttpClient
HttpClient包中提供了拦截器接口org.apache.http.HttpRequestInterceptor,我们实现改接口并将配置到httpclient的配置中即可。
public class HttpClientRequestInterceptor implements HttpRequestInterceptor {
private static Logger logger = LoggerFactory.getLogger(HttpClientRequestInterceptor.class);
private static String NOTICE_MESSAGE_HOST = "www.zjzr.com.cn";
@Override
public void process(HttpRequest httpRequest, HttpContext httpContext) throws HttpException, IOException {
HttpCoreContext adapt = HttpCoreContext.adapt(httpContext);
HttpHost targetHost = adapt.getTargetHost();
String hostName = targetHost.getHostName();
//判断是向该域名发起请求
if(NOTICE_MESSAGE_HOST.equals(hostName)){
logger.warn("您对www.zjzr.com.cn的访问没有认证标识token,有可能被网关拦截,请注意,");
}
}
}
HttpClientUtil.java配置拦截器
private static HttpRequestInterceptor httpRequestInterceptor;
//系统唯一标示token,系统启动时同setter方法配置
private static String token;
static {
try {
初始化拦截器
httpRequestInterceptor = new HttpClientRequestInterceptor();
SSLContextBuilder builder = new SSLContextBuilder();
bui