2012-03-26 27 views
0

我不认为这是可行的,所以也许我需要一种全新的方式来查看问题。Java - 从文件中读取时,在循环中动态插入用户名和密码

我的Java程序连接到一个Web窗体并登录。我有用户名和密码的另一部分代码。 HTML表单显然会包含不同的输入类型。根据用户和网站的不同,每个字段的命名都会有所不同。这里有一个简单的Web表单:

<FORM METHOD=POST ACTION="/my.form"> 
Username: 
<INPUT NAME="username"> 
<BR> 
Password 
<INPUT TYPE="PASSWORD" NAME="password"> 

<INPUT TYPE="HIDDEN" NAME="my-hidden-name" VALUE="someValue"> 

<BR><INPUT TYPE="SUBMIT" VALUE="Login"> 
</FORM> 

在这种形式下,NAME字段可以是任何东西,会改变形式站点到站点。我已经解决此得到通过要求PROPERTIES文件存储的字段,如:

username 
password 
my-hidden-name=someValue 
SUBMIT=Login 

这适用于上述领域的一半。问题是usernamepassword字段。

我已经有用户名和密码,所以我可以只是做:if(currentField=="password") string=mypass123。但如果有人制作了一个表单,其中用户名/密码字段被称为user1passwordField,或基本上除了我在if()中放入的内容之外的任何内容!

所以,任何人都可以提出一种方法,我可以处理任何名称的组合,并仍然确定哪些是用户名和密码字段?这是我目前的代码:

//Read file logic here 
Properties formProps=getDataFromResource(pathToFormFieldsPropfile); 

if(null!=formProps) 
{ 
    //Gets a list of all the field names, eg "username", "password", "submit" 
    Enumeration<?> formFields=formProps.keys(); 
    while(formFields.hasMoreElements()) 
    { 
     String tempString=(String) formFields.nextElement(); //This gets the field name 
     query+=tempString //Will contain field name 
       +"="  //Used as a divider in the querystring, ie field=value 
       +formProps.get(tempString) //Value corresponding to field 
       //+ URLEncoder.encode((String) formProps.get(tempString),Charset.defaultCharset().toString()) //The value needs to be encoded for POST 
       +"&"; //The trailing one of these will have to be removed at the end 
    } 
} 

谢谢!

回答

0

为了跟上这一点,我设法想出了一个解决这个问题的方法,但它可能并不理想。

基本上,我做到这一点,用户必须拥有用户名和密码作为PROPERTIES文件中的第一个和第二个空白条目。

然后在我的代码中,我有一个计数器,它说:if ((counter++)==0), insert username,然后if ((counter++)==1), insert password,然后是else leave it blank

这适用于我需要做的事情,但可能并不理想。

PS,我实现了一个自定义Property类,以确保它们都是有序的,因为默认方法将它们存储在无序列表中。

0

也许你可以使用ID元素来检测哪些字段用于用户名和密码。

否则,它听起来像你可能需要要求用户名和密码字段遵循一些命名约定。

也许他们总是可以以__username和__password(或类似的东西)开头。

+0

对不起,但什么是“ID元素”? – eoinzy 2012-03-27 00:11:21

+0

关于命名约定,网站将已经制作完成,所以字段名称已经存在。我想,如果最坏的情况发生,我可以强制他们在PROPERTIES文件中加上一个下划线或前缀,然后进行处理,最后修剪前缀。问题是如果有一个网站的字段已经以我选择的任何模式开始。 – eoinzy 2012-03-27 00:25:30

相关问题