|
|
@@ -0,0 +1,43 @@
|
|
|
+package com.usoftchina.sso.auth.feign;
|
|
|
+
|
|
|
+import com.usoftchina.saas.utils.http.HmacUtils;
|
|
|
+import feign.RequestInterceptor;
|
|
|
+import feign.RequestTemplate;
|
|
|
+import org.slf4j.Logger;
|
|
|
+import org.slf4j.LoggerFactory;
|
|
|
+
|
|
|
+import java.util.Collection;
|
|
|
+import java.util.Map;
|
|
|
+
|
|
|
+import static com.usoftchina.sso.auth.feign.SignatureConstant.*;
|
|
|
+
|
|
|
+/**
|
|
|
+ * @author yingp
|
|
|
+ * @date 2018/11/23
|
|
|
+ */
|
|
|
+public class SignatureInterceptor implements RequestInterceptor{
|
|
|
+
|
|
|
+ private Logger logger = LoggerFactory.getLogger(SignatureInterceptor.class);
|
|
|
+
|
|
|
+ private final String baseUrl;
|
|
|
+
|
|
|
+ public SignatureInterceptor(String baseUrl) {
|
|
|
+ this.baseUrl = baseUrl;
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public void apply(RequestTemplate requestTemplate) {
|
|
|
+ Map<String, Collection<String>> headers = requestTemplate.headers();
|
|
|
+ if (headers.containsKey(WITH_TIMESTAMP_HEADER)) {
|
|
|
+ requestTemplate.query(headers.get(WITH_TIMESTAMP_HEADER).iterator().next(),
|
|
|
+ String.valueOf(System.currentTimeMillis()));
|
|
|
+ }
|
|
|
+ if (headers.containsKey(WITH_SIGNATURE_HEADER)) {
|
|
|
+ String url = baseUrl + requestTemplate.url() + requestTemplate.queryLine();
|
|
|
+ requestTemplate.query(headers.get(WITH_SIGNATURE_HEADER).iterator().next(),
|
|
|
+ HmacUtils.encode(url));
|
|
|
+ logger.debug("origin url: {}\nsigned url: {}", url,
|
|
|
+ baseUrl + requestTemplate.url() + requestTemplate.queryLine());
|
|
|
+ }
|
|
|
+ }
|
|
|
+}
|