Android JAVA 转 SharePoint 2013 NTLM 401 未授权 [英] Android JAVA to SharePoint 2013 NTLM 401 Unauthorize

查看:31
本文介绍了Android JAVA 转 SharePoint 2013 NTLM 401 未授权的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我是 Java 新手.因为我的公司需要为 SharePoint 2013 创建一个应用程序.我一直收到错误 401.我搜索了很多网站,但我无法让它工作.

I'm new to Java. Cause my company require to create an App for SharePoint 2013. I keep on get error 401. I have search through a lot of website and i just couldn't get it work.

我使用的代码如下:

 StringBuilder sb = new StringBuilder();
    SSLContext sslContext = null;

    // Error Handling
    try {
        sslContext = SSLContext.getInstance("SSL");
        sslContext.init(null, new TrustManager[]{new X509TrustManager() {
            @Override
            public void checkClientTrusted(X509Certificate[] chain, String authType) throws CertificateException {
            }

            @Override
            public void checkServerTrusted(X509Certificate[] chain, String authType) throws CertificateException {
            }

            @Override
            public X509Certificate[] getAcceptedIssuers() {
                return null;
            }
        }}, new SecureRandom());

        // Credential
        NTCredentials credentials = new NTCredentials("username", "password", "Hostname", "domain");
        AuthScope scope = new AuthScope("Hostname", 17963);
        //KeyStore trustStore = KeyStore.getInstance(KeyStore.getDefaultType());
        SSLSocketFactory socketFactory = SSLSocketFactory.getSocketFactory();
        socketFactory.setHostnameVerifier(SSLSocketFactory.ALLOW_ALL_HOSTNAME_VERIFIER);
        Scheme sch = new Scheme("https", socketFactory, 17963);

        DefaultHttpClient httpClient = new DefaultHttpClient();

        httpClient.getCredentialsProvider().setCredentials(scope, credentials);
        httpClient.getConnectionManager().getSchemeRegistry().register(sch);


        // HttpHost host = new HttpHost("HostName", 17963, "https");

        HttpGet get = new HttpGet(_spHostApi);

        HttpResponse response = httpClient.execute(get);

        InputStreamReader reader = new InputStreamReader(response.getEntity().getContent(), "UTF-8");
        BufferedReader rd = new BufferedReader(reader);

        String line = "";

        while ((line = rd.readLine()) != null)
            sb.append(line);

        httpClient.getConnectionManager().shutdown();
    }
    catch (Exception ex) { sb.append(ex.toString()); }

谢谢.请指教

推荐答案

我已经更改了代码,现在可以使用了.

I have changed the code now is working.

工作代码如下:

private void HttpLogin() {
    // Define Progress Dialog
    ProgressDialog progressDialog = ProgressDialog.show(this, "Verifying", "Loading..", true);

    // Variable
    EditText username = (EditText) findViewById(R.id.txtUsername);
    EditText password = (EditText) findViewById(R.id.txtPassword);
    Spinner company = (Spinner)findViewById(R.id.ddlCompany);
    StringBuilder sb = new StringBuilder();
    String title = "";
    CompanyInfo companyInfo = (CompanyInfo)company.getSelectedItem();
    final String user = username.getText() + "";
    final String pass = password.getText() + "";
    final String domain = companyInfo.getCompanyDomain();
    String authorization = domain + "\" + user + ":" + pass;

    TrustManager trustManager = new X509TrustManager() {
        @Override
        public void checkClientTrusted(X509Certificate[] chain, String authType) throws CertificateException { }

        @Override
        public void checkServerTrusted(X509Certificate[] chain, String authType) throws CertificateException {}

        @Override
        public X509Certificate[] getAcceptedIssuers() { return null; }
    };

    // Check
    if (user != "" && pass != "" && domain != "") {

        // Error Handling
        try {
            // Reset Variable
            sb = new StringBuilder();
            title = "";

            // Certificate
            SSLContext sc = SSLContext.getInstance("SSL");
            sc.init(null, new TrustManager[] { trustManager }, new SecureRandom());

            // Add Socket Factory
            HttpsURLConnection.setDefaultSSLSocketFactory(sc.getSocketFactory());

            // Accept All Host Verifier
            HostnameVerifier allHostValid = new HostnameVerifier() {
                @Override
                public boolean verify(String hostname, SSLSession session) { return true; }
            };
            HttpsURLConnection.setDefaultHostnameVerifier(allHostValid);

            // Set Urls
            URL url = new URL("https://YourUrlAddess/");

            // Open Connection
            HttpURLConnection conn = (HttpURLConnection) url.openConnection();
            conn.setDoInput(true);
            conn.setDoOutput(true);
            conn.setRequestMethod(Constant._REQUEST_METHOD_GET);
            conn.setRequestProperty("Accept", "*/*");
            conn.setRequestProperty("Authorization", "Basic " + Base64.encodeToString(authorization.getBytes(), Base64.NO_WRAP));
            conn.connect();

            // Check
            if (conn.getResponseCode() == 401) {
                title = "Login Failed";
                sb.append("Login username or password invalid.");
                conn.disconnect();
            }
            else if(conn.getResponseCode() == 200)
            {
                title = "Authorized";
                sb.append("You have login to SharePoint");
                conn.disconnect();

                Intent intent = new Intent(this, eLeave_HomeActivity.class);
                intent.putExtra(_Username, user);
                startActivity(intent);
            }
            else
            {
                title = "Unknown Error";
                sb.append(conn.getResponseCode() + ": " + conn.getResponseMessage());
            }


        } catch (Exception ex) { sb.append(ex.toString()); }
    }
    else
    {
        title = "Login Failed";
        sb.append("Username or Password or company cannot be empty");
    }
    progressDialog.dismiss();
    AlertMessage(title, sb.toString());
}

这篇关于Android JAVA 转 SharePoint 2013 NTLM 401 未授权的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆