问题背景:
我想通过反射修改请求的头,但是试了很多次,一致无法完成。
代码:
@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的位置如下:
于是我就自己开始尝试着写:
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");
}
结果发现我一直在兜圈子:
想请教下各位。当然,也乐意倾听其他实现方式。