0

MY Domino Sever 已启用会话验证,并且 HTTP 端口号配置为 8080。

当我执行下面的程序来获得一个多米诺 HTTP 会话时,我总是得到下面的输出。

我知道 RESPONSE CODE 200 表示运行平稳。但我没有看到在服务器上创建任何 HTTP 会话。即使我向 UsernamePasswordCredentials("xxxxx", "xxxxx") 提供了错误的凭据,它仍然返回 200 作为其响应代码。对此有什么建议吗?

public class ClientAuthentication { 

  public static void main(String[] args) {

         DefaultHttpClient httpclient = new DefaultHttpClient();
            try {


                httpclient.getCredentialsProvider().setCredentials( new AuthScope("10.40.xx.xx", 8080), 
                                                                        new UsernamePasswordCredentials("xxxxx", "xxxxx"));
                HttpPost httppost = new HttpPost("http://10.40.xx.xx:8080/names.nsf?Login");
                System.out.println("executing request" + httppost.getRequestLine());
                HttpResponse response = httpclient.execute(httppost);

                HttpEntity entity = response.getEntity();

                if (response.getStatusLine().getStatusCode() == HttpURLConnection.HTTP_OK){ 
                    System.out.println("---------------OKAY OKAY-------------------------");
                     System.out.println("RESPONSE CODE " + response.getStatusLine().getStatusCode());
                }

                if (entity != null) {
                    System.out.println("Response content length: " + entity.getContentLength());
                }


            } catch (Exception e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }



  }

}

输出 :

executing requestPOST http://10.40.xx.xx:8080/names.nsf?Login HTTP/1.1
---------------OKAY OKAY-------------------------
RESPONSE CODE 200
Response content length: 4256
4

2 回答 2

1

您已设置会话身份验证。但您正尝试通过默认的 getCredentialsProvider 进行基本身份验证。您收到的 200 响应是您应该发布的实际会话身份验证登录表单。

正确的顺序是

  • 使用您正在登录的数据库的 URL 执行 GET
  • 以服务器的登录表单作为响应接收 200
  • 填写表单数据的用户名和密码名称/值对并发布

从理论上讲,您应该编写自己的类来实现为 Domino 会话身份验证表单量身定制的 CredentialsProvider 接口,并将其与您自己的扩展 AbstractHttpClient 的 DominoHttpClient 类一起使用,以便干净地实现此序列;但我认为这真的不值得付出努力。

于 2012-09-25T10:08:00.607 回答
1

Narasimha,正如@Richard 所指出的,您的请求在发布时没有会话ID。服务器将其视为新请求,因此提供登录页面。

现在要解决这个问题,您需要在实际发布登录请求之前至少访问该站点一次。您可以为此请求登录页面。

将以下代码放在执行 post 请求之前。

HttpMethod method = new GetMethod("http://10.40.xx.xx:8080/names.nsf?Login");
httpclient.executeMethod(method);

这将创建一个会话 ID,该 ID 将在后续请求中传递。

于 2012-09-25T12:14:49.280 回答