package com.miju.backend.feign;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import feign.RequestInterceptor;
import feign.RequestTemplate;
import net.sf.json.util.JSONUtils;
import org.apache.ibatis.ognl.ObjectElementsAccessor;
import org.springframework.stereotype.Component;
import org.springframework.web.context.request.RequestContextHolder;
import org.springframework.web.context.request.ServletRequestAttributes;
import javax.servlet.http.HttpServletRequest;
import java.util.Enumeration;
@Component
public class FeignRequestInterceptor implements RequestInterceptor {
@Override
public void apply(RequestTemplate requestTemplate) {
ServletRequestAttributes attributes = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes();
HttpServletRequest request = attributes.getRequest();
Enumeration<String> headerNames = request.getHeaderNames();
if (headerNames != null) {
while (headerNames.hasMoreElements()) {
String name = headerNames.nextElement();
String values = request.getHeader(name);
if(!name.contains("org.springframework.core.convert.ConversionService")){
requestTemplate.header(name, values);
}
}
}
// 设置request中的attribute到header:主要是设置自行设置的token、userId等信息,以便转发到Feign调用的服务
Object userInfo = request.getAttribute("userInfo");
String jsonString = JSONObject.toJSONString(userInfo);
System.out.println(jsonString);
if (userInfo != null) {
requestTemplate.header("userInfo", jsonString);
}
}
}
//feign远程调用去header里面取用户信息//目前只支持用户信息
public static UserBean getUserFromHttpRequestHeader(String header) {
ServletRequestAttributes attributes = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes();
if (null == attributes) {
throw new CustomException(ResponseCodeMessage.HTTP_ATTRIBUTES_ERROR);
}
HttpServletRequest request = attributes.getRequest();
String userInfo = request.getHeader(header) ;
UserBean parseObject = JSONObject.parseObject(userInfo, UserBean.class);
return parseObject;
}
json和对象之间转换?
HttpServletRequest request = attributes.getRequest();
String aa = request.getHeader(header) ;
UserBean parseObject = JSONObject.parseObject(aa, UserBean.class);