Spring-web源码解析之Filter-HiddenHttpMethodFilter
2016-02-24 15:22
531 查看
基于4.1.7.RELEASE
就如同它的名字,该类负责解析隐藏的HttpMethod,用了这个Filter之后,你可以在页面上POST时指定_method参数,该Filter会根据参数指定的值将Request包装成为指定的HttpMethod的request。需要注意的有两点
1 必须是POST方式才进行处理
2 可以通过设置methodParam来更改参数名字,默认为_method。
主要代码如下
根据注意事项1,如果是GET则直接进行下一个Filter处理。如果是POST,_method参数所传递进来的所有值都会被转换为大写。
附包装器代码
就如同它的名字,该类负责解析隐藏的HttpMethod,用了这个Filter之后,你可以在页面上POST时指定_method参数,该Filter会根据参数指定的值将Request包装成为指定的HttpMethod的request。需要注意的有两点
1 必须是POST方式才进行处理
2 可以通过设置methodParam来更改参数名字,默认为_method。
主要代码如下
protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain filterChain) throws ServletException, IOException { String paramValue = request.getParameter(this.methodParam); if ("POST".equals(request.getMethod()) && StringUtils.hasLength(paramValue)) { String method = paramValue.toUpperCase(Locale.ENGLISH); HttpServletRequest wrapper = new HttpMethodRequestWrapper(request, method); filterChain.doFilter(wrapper, response); } else { filterChain.doFilter(request, response); } }
根据注意事项1,如果是GET则直接进行下一个Filter处理。如果是POST,_method参数所传递进来的所有值都会被转换为大写。
附包装器代码
private static class HttpMethodRequestWrapper extends HttpServletRequestWrapper { private final String method; public HttpMethodRequestWrapper(HttpServletRequest request, String method) { super(request); this.method = method; } @Override public String getMethod() { return this.method; } }
相关文章推荐
- 网络请求参数加签处理
- 什么是A.B.C类网络 怎么区别和划分
- 虚拟机网络模式介绍与说明
- Java 网络编程(三) 创建和使用URL访问网络上的资源
- Java 网络编程(二) 两类传输协议:TCP UDP
- 网络学习笔记1
- RemotingTcpServer state=Create: java.net.BindException: Address already in use: bind
- 10个实用的 Linux 网络和监控命令[转]
- Linux服务器上监控网络带宽的18个常用命令
- tcpdump和wireshark
- Java 网络编程(一) 网络基础知识
- TCP之再谈解决服务器TIMEWAIT过多的问题
- iOS里加载https请求报错说服务器证书无效的解决办法
- 在线HTTP速度测试(响应时间测试)及浏览器兼容测试
- OKHttp附件下载实现,进度监听
- OKHttp上传图片实现,进度监听
- bzoj1412 狼和羊的故事 网络流
- Apache HTTP Server 与 Tomcat 的三种连接方式介绍(转)
- 删除 win8.1中的网络1,网络2,宽带连接1,宽带连接2等网络记录
- 网络框架Volley原理分析