pvg*_*ijn 3 java servlets multipartform-data
我正在寻找一种方法来获取Servlet过滤器中HTTP多部分请求的表单参数,而无需上传文件(尚未).
request.getParameterMap()返回空.我理解这是因为请求是多部分的.
我看过commons.HttpFileUpload但这似乎对我的情况有点过分.在这个过滤器中,我只对正常参数感兴趣,并且还不想处理文件上传.
编辑:主要问题是我需要在过滤器堆栈的下方有一个完整的HttpRequestObject.HttpFileUpload似乎消耗了部分请求数据(可能是通过使用数据流对象并再次关闭它).
它肯定不是矫枉过正,它是正确的方式,总是比自己编写解析器更好.在Apache的通用FileUpload开发并维护多年,证明了其在处理多/表单数据请求的鲁棒性.你不想重新发明轮子.如果你真的想这样做(我不推荐它),那么请阅读multipart/form-data规范并开始阅读HttpServletRequest#getInputStream()(警告:这是二进制和字符数据的混合!).
您可以根据需要编写一个过滤器,它使用Apache Commons FileUpload并检查每个请求是否为multipart/form-data,如果是,则在Commons FileUpload的帮助下将参数放回请求参数映射中.将上传的文件(或异常)作为请求属性放置,以便最终在servlet代码中更透明.你可以在这里找到一个基本的例子来获得这个想法.
希望这可以帮助.
只是为了添加已经提供的答案 - 我有一个非常相似的问题,因为我试图向我们现有的 Web 应用程序添加一些 CSRF 验证。我们决定使用一些 JS 在每个表单中包含一个特殊的标记,并添加一个 servlet 过滤器来检查标记是否存在(因此是一个通用的、隔离的解决方案)。
servlet 将检查令牌是否存在,但对于提供文件上传选项的每个表单都会中断。因此,我在谷歌搜索时经常登陆这个页面。
我们使用的解决方法(同时试图避免处理上传的文件)是让一些 JavaScript 将令牌添加为 GET 参数,即我们修改了表单的操作 URL 以包含令牌,因此可以使用 HttpServletRequest.getParameter () 方法用于令牌(并且只有令牌)。
我已经在 IE、FF 和 Chrome 中对此进行了测试,似乎都很满意。
希望这可以帮助任何也发现自己处于类似情况的人。
| 归档时间: |
|
| 查看次数: |
29286 次 |
| 最近记录: |