使用 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 组件多部分并省略了文件上传。结果仍然是相同的响应是空的,留下关于多部分表单提交的原始结论是问题。