• fegin调用关于session,请求头传递参数问题


    feign调用传递请求头?
    方案:写一个过滤器,将请求头传递过去
    public class FeignBasicAuthRequestInterceptor implements RequestInterceptor {
    @Override
    public void apply(RequestTemplate requestTemplate) {
    ServletRequestAttributes attributes = (ServletRequestAttributes) RequestContextHolder
    .getRequestAttributes();
    HttpServletRequest request = attributes.getRequest();
    Enumeration headerNames = request.getHeaderNames();
    if (headerNames != null) {
    while (headerNames.hasMoreElements()) {
    String name = headerNames.nextElement();
    String values = request.getHeader(name);
    requestTemplate.header(name, values);
    }
    }
    }
    }
    feign调用传递参数?
    方案:写一个过滤器,将参数传递过去
    public class FeignBasicAuthRequestInterceptor implements RequestInterceptor {
    @Override
    public void apply(RequestTemplate requestTemplate) {
    ServletRequestAttributes attributes = (ServletRequestAttributes) RequestContextHolder
    .getRequestAttributes();
    HttpServletRequest request = attributes.getRequest();
    Enumeration headerNames = request.getHeaderNames();
    if (headerNames != null) {
    while (headerNames.hasMoreElements()) {
    String name = headerNames.nextElement();
    String values = request.getHeader(name);
    requestTemplate.header(name, values);
    }
    }
    Enumeration 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);
    template.body(body.toString());
    logger.info(“feign interceptor body:{}”,body.toString());
    }
    }
    }
    feign 调用传递session信息?
    问题:写一个过滤器将session信息传递过去,这里明确一个东西session信息是放在
    InheritableThreadLocal中,但是feign线程是存在复用的,如果上一个线程的threadLocal没有释放的话,后面复用该线程的时候,向threadLocal塞入session将无法塞入。此时会造成内存泄露的问题。具体表现为调用b线程,b线程去获取该线程的threadlocal(由于线程复用的原因)将会获取到a线程的threadlocal。
    方案:每次向threadLocal塞入数据之前,将threadlocal清空。

  • 相关阅读:
    向量数据库——AI时代的基座
    使用 frp 进行内网穿透
    SM项目 - Online Music Player(在线音乐播放器)- 项目部署
    商业化广告--体系学习-- 6 -- 行业蓝图篇 -- 那些产品适合采用广告模式变现
    A1151 LCA in a Binary Tree(30分)PAT 甲级(Advanced Level) Practice(C++)满分题解【LCA+树】
    计算机网络(七)——TCP(下)
    图解电商系统的架构演进
    【C++ 学习 ㉝】- C++11 使用 using 定义别名
    Stable Diffussion和MJ的详细对比
    阿里云 服务网格 ASM
  • 原文地址:https://blog.csdn.net/xiao_xiao3601/article/details/125605712