在表单enctype中,Google Captcha代码插件的参数不可用

时间:2012-04-23 04:23:58

标签: html security jsp servlets

我使用了Google验证码,效果很好。 form也没有enctype。我想在同一个form元素中上传图片。然后将enctype="multipart/form-data"添加到表单的属性中。我遇到了以下问题,我使用JSP servlet:

1

String challenge = request.getParameter("recaptcha_challenge_field"); 

String uresponse = request.getParameter("recaptcha_response_field");  

这里挑战和uresponse给出了空值,因此

ReCaptchaResponse reCaptchaResponse = reCaptcha.checkAnswer(remote, challenge, uresponse);  

给出了空指针异常。

修改:我后来发现,当使用enctype="multipart/form-data标记中的form时,无法在Servlet中将参数及其值检索为request.getParameter('')。 / p>

2。然后我尝试通过FileItem获取上述参数(质询和响应)的值,如下所示

 FileItemFactory factory = new DiskFileItemFactory();
   ServletFileUpload upload = new ServletFileUpload(factory);
   List items = null;
   items = upload.parseRequest(request);
   Iterator itr = items.iterator();                        
                    while (itr.hasNext()) {
                        FileItem item = (FileItem) itr.next();
                        if (item.isFormField()) {
                            String name = item.getFieldName();
                            System.out.println("name: " + name);
                            String value = item.getString();
                            System.out.println("value: " + value); // closing scopes   ....  

这些输出没有给出'recaptcha_challenge_field'和'recaptcha_response_field'的打印结果。但是可以使用HTML input元素的其他参数和值。我观察到的是,当删除表单enctype时,servlet可以具有这些参数('recaptcha_challenge_field'和'recaptcha_response_field')及其值。当只添加表单enctype时,servlet中没有参数。(request.getParameter('recaptha challenge parameter或recaptha-response-field parameter'))。

编辑我检查了浏览器是否发送了这些参数(recaptha-challenge ane recaptha-response-field。)及其值,并发现浏览器可以很好地发送所有参数。问题可能出在servlet中,并在FileItem

中获取参数和值

我想上传带有此Google验证码的图片(用于人工验证)。我当前的实现不起作用。有谁让我知道如何实现这个?

1 个答案:

答案 0 :(得分:0)

原因在于html本身。当input类型文件为空(用户没有从本地pc中选择文件)时,很难或(无法完成)检索参数名称及其值(在servelt中)在我的问题中提到的我的场景中的html元素名称下面。