2016-08-25 9 views
1

ファイルをストリームとしてjavaコードで取得しようとしています。 URIがPDFファイルを返しています。以下はJAX-RSからpdfファイルをストリーミングする応答: '401:Unauthorized' for url

public void downloadToLocal() { 

    try{ 
     Authenticator.setDefault(new Authenticator() { 
      @Override 
      protected PasswordAuthentication getPasswordAuthentication() { 
       return new PasswordAuthentication("test", 
         "test".toCharArray()); 
      } 
     }); 
     URL url = new URL("http://***"); 

     /*String encodedAuthorizedUser = new String(com.sun.jersey.core.util.Base64.encode("***" + ":" + "***")); 
     HttpURLConnection httpCon = (HttpURLConnection) url.openConnection(); 
     httpCon.setRequestProperty("Authorization", "Basic " + encodedAuthorizedUser);*/ 

     InputStream is = url.openStream(); 
     FileOutputStream fos = new FileOutputStream("C:\\db\\test.pdf"); 

     byte[] buffer = new byte[1024]; 
     int noOfBytes = 0; 

     while ((noOfBytes = is.read(buffer)) != -1) { 
      fos.write(buffer, 0, noOfBytes); 
     } 

     fos.close(); 
     is.close(); 
    } catch (Exception e) { 
     e.printStackTrace(); 
    } 

} 

私は取得しています例外されています:私は参照を取っていhereから

java.io.FileNotFoundException: Response: '401: Unauthorized' for url: '*********' 
    at weblogic.net.http.HttpURLConnection.getInputStream(HttpURLConnection.java:487) 
    at weblogic.net.http.SOAPHttpURLConnection.getInputStream(SOAPHttpURLConnection.java:37) 
    at java.net.URL.openStream(URL.java:1010) 
    at com.bt.ngwfmt.framework.services.dlite.DliteServiceClient.downloadToLocal(DliteServiceClient.java:882) 
    at com.bt.ngwfmt.framework.rest.DliteRestHandler.persistDCV(DliteRestHandler.java:167) 
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) 
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) 
    at java.lang.reflect.Method.invoke(Method.java:597) 
    at com.sun.jersey.spi.container.JavaMethodInvokerFactory$1.invoke(JavaMethodInvokerFactory.java:60) 
    at com.sun.jersey.server.impl.model.method.dispatch.AbstractResourceMethodDispatchProvider$TypeOutInvoker._dispatch(AbstractResourceMethodDispatchProvider.java:185) 
    at com.sun.jersey.server.impl.model.method.dispatch.ResourceJavaMethodDispatcher.dispatch(ResourceJavaMethodDispatcher.java:75) 
    at com.sun.jersey.server.impl.uri.rules.HttpMethodRule.accept(HttpMethodRule.java:302) 
    at com.sun.jersey.server.impl.uri.rules.RightHandPathRule.accept(RightHandPathRule.java:147) 
    at com.sun.jersey.server.impl.uri.rules.ResourceClassRule.accept(ResourceClassRule.java:108) 
    at com.sun.jersey.server.impl.uri.rules.RightHandPathRule.accept(RightHandPathRule.java:147) 
    at com.sun.jersey.server.impl.uri.rules.RootResourceClassesRule.accept(RootResourceClassesRule.java:84) 
    at com.sun.jersey.server.impl.application.WebApplicationImpl._handleRequest(WebApplicationImpl.java:1542) 
    at com.sun.jersey.server.impl.application.WebApplicationImpl._handleRequest(WebApplicationImpl.java:1473) 
    at com.sun.jersey.server.impl.application.WebApplicationImpl.handleRequest(WebApplicationImpl.java:1419) 
    at com.sun.jersey.server.impl.application.WebApplicationImpl.handleRequest(WebApplicationImpl.java:1409) 
    at com.sun.jersey.spi.container.servlet.WebComponent.service(WebComponent.java:409) 
    at com.sun.jersey.spi.container.servlet.ServletContainer.service(ServletContainer.java:558) 
    at com.sun.jersey.spi.container.servlet.ServletContainer.service(ServletContainer.java:733) 
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:820) 
    at weblogic.servlet.internal.StubSecurityHelper$ServletServiceAction.run(StubSecurityHelper.java:227) 
    at weblogic.servlet.internal.StubSecurityHelper.invokeServlet(StubSecurityHelper.java:125) 
    at weblogic.servlet.internal.ServletStubImpl.execute(ServletStubImpl.java:300) 
    at weblogic.servlet.internal.ServletStubImpl.execute(ServletStubImpl.java:183) 
    at weblogic.servlet.internal.WebAppServletContext$ServletInvocationAction.wrapRun(WebAppServletContext.java:3717) 
    at weblogic.servlet.internal.WebAppServletContext$ServletInvocationAction.run(WebAppServletContext.java:3681) 
    at weblogic.security.acl.internal.AuthenticatedSubject.doAs(AuthenticatedSubject.java:321) 
    at weblogic.security.service.SecurityManager.runAs(SecurityManager.java:120) 
    at weblogic.servlet.internal.WebAppServletContext.securedExecute(WebAppServletContext.java:2277) 
    at weblogic.servlet.internal.WebAppServletContext.execute(WebAppServletContext.java:2183) 
    at weblogic.servlet.internal.ServletRequestImpl.run(ServletRequestImpl.java:1454) 
    at weblogic.work.ExecuteThread.execute(ExecuteThread.java:209) 
    at weblogic.work.ExecuteThread.run(ExecuteThread.java:178) 

以下の私のコードスニペットです。そこから両方の方法を試しました。私は同様の問題hereも見つけました。しかし、私はこのパスワード認証をスキップするために必要なものを得ることができませんでした。これはブラウザでURLを入力してユーザー名とパスワードを手動で入力するときに機能します。

ご協力いただければ幸いです。 :)

注:weblogic 10.3.5を使用しています。明示的に認証ヘッダーを設定するためのおかげで

+0

。これを確認してください。http://stackoverflow.com/questions/496651/connecting-to-remote-url-which-requires-authentication-using-java –

+0

この認証方法は、一般的に正しいです。この問題はWebLogicで発生します。 –

答えて

2

は、それはデフォルトのオーセンティケータとWebLogic固有の問題のように見える
試してみてください。

URLConnection conn = url.openConnection(); 
String creds = user + ":" + pass; 
String encodedCreds = "Basic " + new String(new Base64().encode(creds.getBytes())); 
conn.setRequestProperty ("Authorization", encodedCreds); 
InputStream in = conn.getInputStream(); 
+0

もう1つの方法は、ここで提案されているようにカスタム・ハンドラを使用することです - https://community.oracle.com/thread/1668714?start=0 –

+0

ユーザー名とパスワードに[Ecial Symbol]が含まれていない場合は、 URL - http:// user:[email protected]/url またはサードパーティのhttpクライアント、Apacheなどを使用してください。 –

+0

こんにちは、ありがとうございます。それは働いた:)乾杯 –

1

WebLogicはHttpURLConnectionの独自の実装を使用しているといくつかの問題を持っているからです。

だから、別の解決策は、真

ソースにUseSunHttpHandlerオプションを設定し、標準のSunのHttpURLConnectionの
を使用するようにWebLogicを強制することです - あなたは正しい方法で認証を使用していないhttps://pravejay.wordpress.com/2012/09/21/weblogic-javax-xml-ws-webserviceexception-failed-to-access-the-wsdl-response-401-unauthorized/

関連する問題