package com.cn.jll.utils.feign;
import java.util.Enumeration;
import java.util.HashMap;
import java.util.LinkedHashMap;
import java.util.Map;
import java.util.logging.Logger;
import javax.servlet.http.HttpServletRequest;
import com.cn.jll.utils.log.SysLog;
import org.springframework.stereotype.Component;
import org.springframework.web.context.request.RequestContextHolder;
import org.springframework.web.context.request.ServletRequestAttributes;
import feign.RequestInterceptor;
import feign.RequestTemplate;
/**
* Feign统一Token拦截器
*/
@Component
public class FeignTokenInterceptor implements RequestInterceptor {
public void apply(RequestTemplate requestTemplate) {
if (null == getHttpServletRequest()) {
//根据自身业务,是否需要日志记录
return;
}
//将获取Token对应的值往下面传
requestTemplate.header("token", getHeaders(getHttpServletRequest()).get("token"));
/*String body=getBody(getHttpServletRequest());
if(body.length()!=0){
requestTemplate.body(body);
}*/
getBodys(getHttpServletRequest(),requestTemplate);
}
private HttpServletRequest getHttpServletRequest() {
try {
return ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest();
} catch (Exception e) {
return null;
}
}
/**
* Feign拦截器拦截请求获取Token对应的值
*
* @param request
* @return
*/
private Map<String, String> getHeaders(HttpServletRequest request) {
Map<String, String> map = new LinkedHashMap<>();
Enumeration<String> enumeration = request.getHeaderNames();
while (enumeration.hasMoreElements()) {
String key = enumeration.nextElement();
String value = request.getHeader(key);
map.put(key, value);
}
return map;
}
/*
* @Author zqc
* @Description //TODO Feign拦截器拦截请求获取参数对应的值(适用于post请求)
* @Date 14:08 2019/12/31
* @Param [request]
* @return java.lang.String
**/
private String getBody(HttpServletRequest request){
Enumeration<String> bodyNames = request.getParameterNames();
StringBuffer body =new StringBuffer();
if (bodyNames != null) {
while (bodyNames.hasMoreElements()) {
String name = bodyNames.nextElement();
String values = request.getParameter(name);
body.append(name).append("=").append(values).append("&");
}
}
if(body.length()!=0) {
body.deleteCharAt(body.length()-1);
}
return body.toString();
}
/*
* @Author zqc
* @Description //TODO Feign拦截器拦截请求获取参数对应的值
* @Date 15:14 2019/12/31
* @Param [request, requestTemplate]
* @return java.lang.String
**/
private void getBodys(HttpServletRequest request,RequestTemplate requestTemplate){
Enumeration<String> bodyNames = request.getParameterNames();
StringBuffer body =new StringBuffer();
if (bodyNames != null) {
Map map=new HashMap();
while (bodyNames.hasMoreElements()) {
String name = bodyNames.nextElement();
String values = request.getParameter(name);
requestTemplate.query(name, values);
map.put(name,values);
}
SysLog.info("传入参数:"+map);
}
}
}
Feign统一Token拦截器
于 2020-04-24 15:11:23 首次发布