我想通过反射修改请求的头,但是试了很多次,一致无法完成。
代码:
@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);
}
}
于是我就自己开始尝试着写:
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");
}
结果发现我一直在兜圈子:
你如果只是想getHeader的时候,返回你需要的数据,那也没必要搞反射去改数据,拦截链中的传递的request,又不绝对是原始的request,你在外面包一层request,自己改写getheader的逻辑