修改Request的请求路径
来源:互联网 发布:软件系统租用合同范本 编辑:程序博客网 时间:2024/06/05 20:41
本文章介绍关于如何修改Request的请求路径,不是请求转发,也不是重定向。
介绍源码
如果要修改Request的请求路径,就得知道路径是保存在哪个类的哪个字段里面。
跟踪源码可知路径是保存在org.apache.coyote.Request
这个类的uriMB
这个字段里面,uriMB
是一个MessageBytes
类型,MessageBytes
中使用strValue
保存路径,而且在MessageBytes
类中为strValue
提供了setter
,getter
方法,所以你可以调用setter
来改变请求路径。因此Request的路径最终是保存在MessageBytes
的strValue
字段中。
但是光知道路径的保存字段还不够,还得知道在哪里调用。我在这里仅仅说下大概涉及到的类。 org.apache.catalina.connector.RequestFacade;
: org.apache.catalina.connector.Request
org.apache.coyote.Request
编写代码
import org.apache.catalina.connector.RequestFacade;import org.apache.coyote.Request;import org.apache.tomcat.util.buf.MessageBytes;import javax.servlet.*;import java.io.IOException;import java.lang.reflect.Field;import static javax.swing.UIManager.get;public class ParseURLFilter implements Filter{ @Override public void init(FilterConfig filterConfig) throws ServletException { } @Override public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException { System.out.println(servletRequest); RequestFacade facade= (RequestFacade) servletRequest; Class clzz=RequestFacade.class; try { Field field=clzz.getDeclaredField("request"); field.setAccessible(true); org.apache.catalina.connector.Request request=(org.apache.catalina.connector.Request) field.get(facade); Class requestClass=request.getClass(); //获取封装org.apache.coyote.Request的字段 Field coyoteField=requestClass.getDeclaredField("coyoteRequest"); coyoteField.setAccessible(true); Request coyoteRequest=(Request)coyoteField.get(request); Class requestClazz=Request.class; //获取org.apache.coyote.Request中保存路径的字段 Field uriMBField= requestClazz.getDeclaredField("uriMB"); uriMBField.setAccessible(true); MessageBytes uriMB=(MessageBytes)uriMBField.get(coyoteRequest); //这里就是改变路径的地方 String path=uriMB.getString()+"dd"; uriMB.setString(path); filterChain.doFilter(facade,servletResponse); //用来打印请求路径 System.out.println(((RequestFacade) servletRequest).getRequestURL()); } catch (NoSuchFieldException e) { e.printStackTrace(); } catch (IllegalAccessException e) { e.printStackTrace(); } } @Override public void destroy() { }}
阅读全文
0 0
- 修改Request的请求路径
- Request.url请求路径的一些属性
- request获取完整的请求路径
- Request.url请求路径的基本属性
- java request获取请求路径的信息
- 获取Request请求的路径信息
- Request.url请求路径的一些属性
- Request.url请求路径的一些属性
- 获取Request请求的路径信息
- request路径请求函数
- 页面 request请求路径!
- request请求路径
- 有关请求路径的总结 request.getContextPath()、request.getServletContext().getRealPath("")、request.getRequestURI
- 获取request请求路径信息
- 获取request请求路径信息
- Request中 请求路径 的几种区别
- ###request获取请求路径内容的相关方法总结。例如:request.getContextPath()。。。
- request如何获取请求路径方法
- Git学习总结
- 绘制Android机器人
- 初入Spring遇到的小问题
- LinuxMint轻松解决TXT文本乱码问题
- 大话遗传算法(含Matlab代码)
- 修改Request的请求路径
- 会话技术 Cookie&Session
- Python基础教程第八章学习笔记——异常
- mysql存储过程几个小案例
- Spring的环境搭建与注入
- hadoop文件上传解析
- linux下ffmpeg安装
- Objective-C的内省
- hackerrank Lucky Numbers(扩展gcd/规律)