0

使用 Wicket 6.17 和 servlet 2.5,我有一个允许文件上传的表单,并且还有 ReCaptcha(使用 Recaptcha4j)。当表单有 ReCaptcha 而没有文件上传时,它可以使用代码正常工作:

    final HttpServletRequest servletRequest = (HttpServletRequest ) ((WebRequest) getRequest()).getContainerRequest();
    final String remoteAddress = servletRequest.getRemoteAddr();
    final String challengeField = servletRequest.getParameter("recaptcha_challenge_field");
    final String responseField = servletRequest.getParameter("recaptcha_response_field");

获取挑战和响应字段,以便对其进行验证。

当表单上传文件时,这不起作用,因为表单必须是多部分的才能上传,所以当我尝试以这种方式获取参数时,它失败了。

我一直在尝试使用 ServletFileUpload 以不同方式获取参数:

    ServletFileUpload fileUpload = new ServletFileUpload(new DiskFileItemFactory(new FileCleaner()) );
    String response = IOUtils.toString(servletRequest.getInputStream());

    ServletFileUpload fileUpload = new ServletFileUpload(new DiskFileItemFactory(new FileCleaner()) );
    List<FileItem> requests = fileUpload.parseRequest(servletRequest);

两者总是返回空。

使用 Chrome 的网络控制台,我在请求有效负载中看到了我正在寻找的值,所以我知道它们就在某个地方。

任何关于为什么请求返回为空以及如何找到它们的建议将不胜感激。

更新:我也尝试过制作 ReCaptcha 组件多部分并省略了文件上传。结果仍然是相同的响应是空的,留下关于多部分表单提交的原始结论是问题。

4

1 回答 1

0

感谢 Wicket In Action 这本书,我找到了解决方案:

MultipartServletWebRequest multiPartRequest = webRequest.newMultipartWebRequest(getMaxSize(), "ignored");
// multiPartRequest.parseFileParts(); // this is needed since Wicket 6.19.0+
IRequestParameters params = multiPartRequest.getRequestParameters();

允许我现在使用 getParameterValue() 方法读取值。

于 2014-10-24T12:57:56.470 回答