当前位置: 首页 > news >正文

onceperrequestfilter 不生效问题

最近起了一个新的java服务,springboot项目,然后公司内部前端接口调用都通过gateway,同事写了一个公共的jar包,功能是从header中取用户信息,用户信息是gateway写进去的,然后我的新服务引了这个包,但是这玩意儿不起效,get完了是null,所以我去看了看代码,代码如下:

我的调用代码:

Map<String, Object> data = UserContextHolder.getInstance().getContext();

理论上,这个data里有登录用的id姓名之类的,但是get完了这个data是个null,好,继续往里找:

UsercontextHolder里有啥?

public class UserContextHolder {private ThreadLocal<Map<String, Object>> threadLocal = new ThreadLocal();private UserContextHolder() {}public static UserContextHolder getInstance() {return UserContextHolder.SingletonHolder.sInstance;}public void setContext(Map<String, Object> map) {this.threadLocal.set(map);}public Map<String, Object> getContext() {return (Map)this.threadLocal.get();}public void clear() {this.threadLocal.remove();}private static class SingletonHolder {private static final UserContextHolder sInstance = new UserContextHolder();private SingletonHolder() {}}
}

非常好,也很简单,那这玩意儿啥时候赋的值呢?应该在同一个包里,然后我找到了:

package com.aaa.bbb;import com.alibaba.fastjson2.JSON;
import com.alibaba.fastjson2.JSONObject;
import java.io.IOException;
import java.util.Base64;
import java.util.HashMap;
import javax.servlet.FilterChain;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.springframework.stereotype.Component;
import org.springframework.web.filter.OncePerRequestFilter;@Component
public class TokenAuthenticationFilter extends OncePerRequestFilter {public TokenAuthenticationFilter() {}protected void doFilterInternal(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, FilterChain filterChain) throws ServletException, IOException {String userInfo = httpServletRequest.getHeader("x-client-token-user");// 这里省略了一部分,反正就是鼓捣了个map出来HashMap user=parse(userInfo);UserContextHolder.getInstance().setContext(user);filterChain.doFilter(httpServletRequest, httpServletResponse);}
}

看不出有啥问题,启动服务发现这玩意儿没注册上,好的,copy一份到自己的代码里,可以运行,也能注册上。
那么,问题在哪儿呢???
又思考了一会儿,发现了问题所在,就是这个package,我的启动类所在package为:

package com.aaa.ccc;

这个filter的package为:

package com.aaa.bbb;

所以,在启动类上加上:

@ComponentScan(basePackages = {"com.aaa"})

就可以了。

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • Centos 安装 Gitlab
  • 数据库文件管理
  • hcip作业1
  • apex正则表达式匹配富文本字段内容,如何只匹配文本而忽略富文本符号
  • Astro 实现TodoList网页应用案例
  • 【机器学习基础】Scikit-learn主要用法
  • 【问题处理】海康视频websocket代理问题(websocket在业务系统https协议下调用海康ws协议)
  • 想提交BCSP小高组T4的同学请看这里~
  • 链接器找不到一些ACADO库中的函数定义,导致未定义引用的错误。
  • Leetcode 3143. 正方形中的最多点数(二分、数组字符串、位运算集合)
  • 函数function3
  • 解决Firefox代理身份验证弹出窗口问题:C#和Selenium实战指南
  • 量化金融人都在看哪些顶刊
  • C#--DirectShowLib 关闭自动白平衡和自动曝光时间
  • MATLAB基础操作(二)
  • 【跃迁之路】【444天】程序员高效学习方法论探索系列(实验阶段201-2018.04.25)...
  • 4. 路由到控制器 - Laravel从零开始教程
  • js如何打印object对象
  • Spring Cloud Feign的两种使用姿势
  • vue--为什么data属性必须是一个函数
  • Web Storage相关
  • 工程优化暨babel升级小记
  • 聚类分析——Kmeans
  • 浅谈JavaScript的面向对象和它的封装、继承、多态
  • 设计模式走一遍---观察者模式
  •  一套莫尔斯电报听写、翻译系统
  • 一文看透浏览器架构
  • ionic异常记录
  • # linux 中使用 visudo 命令,怎么保存退出?
  • # 达梦数据库知识点
  • #QT(智能家居界面-界面切换)
  • (react踩过的坑)antd 如何同时获取一个select 的value和 label值
  • (二)测试工具
  • (附源码)springboot课程在线考试系统 毕业设计 655127
  • (解决办法)ASP.NET导出Excel,打开时提示“您尝试打开文件'XXX.xls'的格式与文件扩展名指定文件不一致
  • (论文阅读26/100)Weakly-supervised learning with convolutional neural networks
  • (七)Activiti-modeler中文支持
  • (一)Thymeleaf用法——Thymeleaf简介
  • (转)程序员疫苗:代码注入
  • .cfg\.dat\.mak(持续补充)
  • .NET core 自定义过滤器 Filter 实现webapi RestFul 统一接口数据返回格式
  • .net SqlSugarHelper
  • .NET 读取 JSON格式的数据
  • .NET国产化改造探索(一)、VMware安装银河麒麟
  • /bin/rm: 参数列表过长"的解决办法
  • @for /l %i in (1,1,10) do md %i 批处理自动建立目录
  • [2018/11/18] Java数据结构(2) 简单排序 冒泡排序 选择排序 插入排序
  • [20190401]关于semtimedop函数调用.txt
  • [Angular 基础] - 自定义指令,深入学习 directive
  • [Angularjs]ng-select和ng-options
  • [BT]小迪安全2023学习笔记(第15天:PHP开发-登录验证)
  • [bzoj1324]Exca王者之剑_最小割
  • [C/C++] -- 二叉树
  • [gdc19]《战神4》中的全局光照技术
  • [hdu 3746] Cyclic Nacklace [kmp]