Java - 从文件读取时在循环中动态插入用户名和密码

时间:2012-03-26 22:37:31

标签: java properties webforms

我不认为这是可能的,所以也许我需要一种全新的方式来研究这个问题。

我的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
    }
}

谢谢!

2 个答案:

答案 0 :(得分:0)

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

否则听起来您可能需要要求用户名和密码字段遵循某些命名约定。

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

答案 1 :(得分:0)

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

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

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

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

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