0

MY多米诺Sever的针对会话验证和HTTP端口号启用被配置为8080尝试使用的HttpClient以获得DOMINO HTTP会话 - 响应代码总是200

当我执行下面的程序,以获得多米诺骨牌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(); 
      } 



    } 

} 

OUTPUT:

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

你如何检查服务器上是否创建会话? – Santosh

+0

在Domino Administrator窗口中,我可以看到有多少互联网用户连接以及他们是谁。如果我通过网络浏览器登录/认证,它工作正常,我可以看到这些用户连接/会话创建。 –

+0

请打印回复内容并查看回复内容。这将有一些线索回应。 – Santosh

回答

1

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

正确顺序是

  • 做一个GET与你登录到
  • 数据库的URL中的用户名和密码名与服务器的登录表单收到200作为响应
  • 填写/值对的表单数据和POST它

理论上你应该编写自己的类来实现适合Domino会话的CredentialsProvider接口au认证表单,并将其与您自己的扩展AbstractHttpClient的DominoHttpClient类一起使用,以便干净地实现这个选项;但我不认为这是值得的。

+0

我遵循上面的顺序,现在可以在Domino上创建一个HTTP会话。谢谢。但是你说“我认为这不值得这么做”?我们有其他方法来做到这一点吗? –

+0

我对额外工作的评论涉及到创建自己的类来扩展AbstractHttpClient并实现CredentialsProvider。除非我正在构建和维护多个Domino环境的多个应用程序,否则我可能不会为此而烦恼。如果仅用于单个应用程序或目标Domino环境,则可能只需在Main()中编写代码以执行GET操作,验证200响应,验证表单是否包含预期字段,然后生成POST。 –

1

Narasimha,正如@Richard指出的那样,您的请求在发布时没有会话ID。服务器认为它是新的请求,因此提供登录页面。

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

把下面的代码之前执行发布请求。

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

这将创建将在后续请求中传递的会话ID。

相关问题