总有一天你的谜底会解开 2022-05-09 21:47 采纳率: 77.4%
浏览 175
已结题

SpringSecurity再过滤器中通过反射修改请求头

问题背景:

我想通过反射修改请求的头,但是试了很多次,一致无法完成。
代码:

@Component
public class HeaderControlFilter extends OncePerRequestFilter {

    @Override
    protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain filterChain) throws ServletException, IOException {
        System.out.println("sss");
        filterChain.doFilter(request, response);
    }
}

在上述代码的输出语句打上断点后,找到Headers的位置如下:

img

于是我就自己开始尝试着写:

 Class<? extends HttpServletRequest>itsClass=request.getClass();
        try{
            Field request1 = itsClass.getSuperclass().getSuperclass().getDeclaredField("request");
            request1.setAccessible(true);
            Object o = request1.get(request);

            Field o2 = o.getClass().getSuperclass().getSuperclass().getDeclaredField("request");
            o2.setAccessible(true);
            Object oo = o2.get(request);

            Field o3 = oo.getClass().getSuperclass().getSuperclass().getDeclaredField("request");
            o3.setAccessible(true);
            Object ooo=o3.get(request);

            Field o4 = ooo.getClass().getSuperclass().getSuperclass().getDeclaredField("request");
            o4.setAccessible(true);
            Object oooo=o4.get(request);
            System.out.println("ss");
      }

结果发现我一直在兜圈子:

img

img


想请教下各位。当然,也乐意倾听其他实现方式。

  • 写回答

1条回答 默认 最新

  • a1767028198 2022-05-10 09:34
    关注

    你如果只是想getHeader的时候,返回你需要的数据,那也没必要搞反射去改数据,拦截链中的传递的request,又不绝对是原始的request,你在外面包一层request,自己改写getheader的逻辑

    img


    img


    -------------------------------- 运行效果

    img


    img

    评论

报告相同问题?

问题事件

  • 已结题 (查看结题原因) 5月10日
  • 创建了问题 5月9日

悬赏问题

  • ¥20 pyTMD库该如何使用
  • ¥20 怎么在comsol“磁场和电场”物理场里设置永磁体
  • ¥20 统计计算,抽样重要性重抽样
  • ¥15 Pyqt 如何安全立即中止Qthread?
  • ¥15 一般HR面试程序员会问什么问题
  • ¥15 fluent udf 编写问题
  • ¥15 Fluent udf编写问题
  • ¥15 如何安装vue.js
  • ¥15 anaconda打开Jupyter notebook输出结果死循环导致卡死
  • ¥15 C++加密解密问题解惑答疑