401通过javacode调用webservice时未经授权

时间:2017-05-25 13:51:39

标签: web-services jersey-2.0 apache-httpclient-4.x

我必须通过java调用Web服务。当我点击浏览器中的Web服务URL时,它会询问用户名和密码,我可以看到结果, 但是当我尝试使用java代码调用它时,我得到的错误就像

  

您无权查看此页面BODY {font:8pt / 12pt verdana} H1 {font:13pt / 15pt verdana} H2 {font:8pt / 12pt verdana} A:link {color:red} A:visited { color:maroon}

您无权查看此页面

您无权使用您提供的凭据查看此目录或页面,因为您的Web浏览器正在发送WWW-Authenticate Web服务器未配置为接受的标头字段。

请尝试以下操作:

  • 如果您认为应该能够查看此目录,请与网站管理员联系或页面。
  • 单击“刷新”按钮以使用其他凭据重试。

HTTP错误401.2 - 未经授权:由于服务器配置,访问被拒绝。
Internet信息服务(IIS)


技术信息(针对支持人员)

  • 转到Microsoft Product Support Services并执行标题搜索< b> HTTP 和 401
  • 打开 IIS帮助,这是一个在IIS管理器(inetmgr)中可访问,并搜索标题为关于安全性身份验证关于自定义错误消息的主题。
  • < / UL>   我无法使用SOAP UI

    访问结果

我真的被卡住了,我尝试使用httpclient / jersey

请帮助我如何使用java代码发送用户名和密码

import org.apache.http.HttpResponse;
import org.apache.http.auth.AuthScope;
import org.apache.http.auth.NTCredentials;
import org.apache.http.auth.params.AuthPNames;
import org.apache.http.client.CredentialsProvider;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.client.params.AuthPolicy;
import org.apache.http.client.protocol.ClientContext;
import org.apache.http.impl.client.BasicCredentialsProvider;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.impl.conn.PoolingClientConnectionManager;
import org.apache.http.protocol.BasicHttpContext;
import org.apache.http.protocol.HttpContext;


public class NTLM_TRY2 {

    /**
     * @param args
     */
    public static void main(String[] args) throws Exception{
          DefaultHttpClient httpclient = new DefaultHttpClient();
            HttpContext localContext = new BasicHttpContext();
            HttpGet httpget = new HttpGet("http://10.0.134.114/eBill/bpsWebService.asmx"); 
            CredentialsProvider credsProvider = new BasicCredentialsProvider();
            credsProvider.setCredentials(AuthScope.ANY,
                    new NTCredentials("abc", "acb@578", "", ""));

                java.util.List<String> authtypes = new ArrayList<String>();
                authtypes.add(AuthPolicy.NTLM);
                authtypes.add(AuthPolicy.DIGEST);
                authtypes.add(AuthPolicy.BASIC);
                httpclient.getParams().setParameter(AuthPNames.PROXY_AUTH_PREF,
                        authtypes);
                httpclient.getParams().setParameter(AuthPNames.TARGET_AUTH_PREF,
                        authtypes);

            localContext.setAttribute(ClientContext.CREDS_PROVIDER, credsProvider);
            HttpResponse response = httpclient.execute(httpget, localContext);
            System.out.println("Response code: " + response.getStatusLine());


    }

}

1 个答案:

答案 0 :(得分:0)

如果是基本身份验证,则必须在请求的标头中向用户发送密码。

在SO中查看此问题。 Http Basic Authentication in Java using HttpClient?