【问题标题】:Java Digest Authentication POST XMLJava 摘要式身份验证 POST XML
【发布时间】:2011-07-27 08:52:23
【问题描述】:

我需要一些帮助才能使 DIGEST Authentication 正常工作。我正在使用 apache 4.1 库。当我尝试登录时,我得到了。

线程“主”javax.net.ssl.SSLPeerUnverifiedException 中的异常:对等体未通过身份验证

我正在尝试登录 Asterisk SwitchVox Dev Extend API,您只需发送一个 xml 帖子,它就会返回信息。我当然有正确的用户名/密码,而且我在 PERL 脚本上得到了这个,但我无法在 JAVA 中得到它。

这是我的代码

public class Main {

public static void main(String[] args) throws Exception {

    HttpHost targetHost = new HttpHost("192.168.143.253", 443, "https");

    DefaultHttpClient httpclient = new DefaultHttpClient();
    try {
        httpclient.getCredentialsProvider().setCredentials(
                new AuthScope("192.168.143.253", targetHost.getPort()),
                new UsernamePasswordCredentials("username", "mypassword"));

        // Create AuthCache instance
        AuthCache authCache = new BasicAuthCache();
        // Generate DIGEST scheme object, initialize it and add it to the local auth cache

        DigestScheme digestAuth = new DigestScheme();

        authCache.put(targetHost, digestAuth);

        // Add AuthCache to the execution context
        BasicHttpContext localcontext = new BasicHttpContext();
        localcontext.setAttribute(ClientContext.AUTH_CACHE, authCache);

        HttpGet httpget = new HttpGet("https://192.168.143.253/xml/");

        System.out.println("executing request: " + httpget.getRequestLine());
        System.out.println("to target: " + targetHost);

        for (int i = 0; i < 3; i++) {
            HttpResponse response = httpclient.execute(targetHost, httpget, localcontext);
            HttpEntity entity = response.getEntity();

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

    } finally {
        // When HttpClient instance is no longer needed,
        // shut down the connection manager to ensure
        // immediate deallocation of all system resources
        httpclient.getConnectionManager().shutdown();
    }
}

}

【问题讨论】:

    标签: java http xmlhttprequest digest-authentication


    【解决方案1】:

    我终于找到了我的问题的答案。

    public static void main(String args[]) {
    
        final String username = "user";
        final String password = "password";
    
    
    
        Authenticator.setDefault(new Authenticator() {
            @Override
              protected PasswordAuthentication getPasswordAuthentication() {
                    PasswordAuthentication pa = new PasswordAuthentication (username, password.toCharArray());
                    //System.out.println(pa.getUserName() + ":" + new String(pa.getPassword()));
                    return pa;
                }
              });
        BufferedReader in = null;
        StringBuffer sb = new StringBuffer();
    
        try {
            //URL url = new URL(strURL);
    
            HttpsURLConnection connection = (HttpsURLConnection) new URL("https://secureHost/").openConnection();
                        connection.setDefaultHostnameVerifier(new CustomizedHostnameVerifier());
                        connection.setHostnameVerifier(new CustomizedHostnameVerifier());
                        connection.setDoOutput(true);
                        connection.setDoInput(true);
                        connection.setRequestMethod("POST");
                        connection.setRequestProperty("Content-Type","text/xml");
                        PrintWriter out = new PrintWriter(connection.getOutputStream());
                        String requestString = "<request method=\"switchvox.currentCalls.getList\"></request>";
    
                        out.println(requestString);
                        out.close();
    
            in = new BufferedReader(new InputStreamReader(connection
                    .getInputStream()));
    
            String line;
    
            while ((line = in.readLine()) != null) {
                sb.append(line).append("\n");
            }
        } catch (java.net.ProtocolException e) {
            sb.append("User Or Password is wrong!");
            e.printStackTrace();
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            try {
                if (in != null) {
                    in.close();
                }
            } catch (Exception e) {
                System.out.println("Exception");
            }
        }
    
        System.out.println("The Data is: " + sb.toString());
    
    }
    

    }

    【讨论】:

    • 您没有在答案中使用DigestScheme digestAuth = new DigestScheme();。这如何与 Digest 安全性一起工作(我知道代码有效,我想知道它的安全性)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-08-29
    • 1970-01-01
    • 2011-07-09
    相关资源
    最近更新 更多