2015-09-14 6 views
9

Я пытаюсь получить доступ к URL-адресу, для которого требуется аутентификация по имени пользователя и паролю.Доступ к URL, защищенному паролем

Ошибок при строительстве. Не хватает ли чего-нибудь?

это первый класс, он устанавливает аутентификатор, который будет использоваться в сетевой код

public class AccessPasswordProtectedURLWithAuthenticator { 

    public static void main(String[] args) { 

    try { 

     // when a proxy or an HTTP server asks for authentication. 

     Authenticator.setDefault(new Authenticator(){}); 

     URL url = new URL("http://website.html"); 

     // read text returned by server 
     BufferedReader in = new BufferedReader(new InputStreamReader(url.openStream())); 

     String line; 
     while ((line = in.readLine()) != null) { 
      System.out.println(line); 
     } 
     in.close(); 

    } catch (MalformedURLException e) { 
     System.out.println("Malformed URL: " + e.getMessage()); 
    } catch (IOException e) { 
     System.out.println("I/O Error: " + e.getMessage()); 

    } 

} 

} 

второй класс

public class CustomAuthenticator extends Authenticator{ 

    /// Called when password authorization is needed 

    protected PasswordAuthentication getPasswordAuthentication() { 

     /// Get information about the request 

     String prompt = getRequestingPrompt(); 
     String hostname = getRequestingHost(); 
     InetAddress ipaddr = getRequestingSite(); 
     int port = getRequestingPort(); 

     String username = "Administrator"; 

     String password = "Administrator"; 

     /// Return the information (a data holder that is used by Authenticator) 

     return new PasswordAuthentication(username, password.toCharArray()); 

    } 

} 
+0

вы получаете всплывающее окно, когда вы пытаетесь получить доступ к URL в браузере –

ответ

3

Ваш первый сегмент кода не ссылается на второй класс , Он должен иметь этот код:

Authenticator.setDefault(new CustomAuthenticator()); 
+0

хороший улов. Это должно быть решением. –

2

Вы пробовали добавить имя пользователя и пароль к имени хоста в самом URL-адресе? Это может привести к тому, что вы вообще не сможете использовать Authenticator:

URL url = new URL("http://username:[email protected]"); 
1

Это может быть удобно.

private HttpURLConnection getJsonConnection(String urlString) throws IOException { 

    URL url = new URL(urlString); 

    HttpURLConnection urlConnection = (HttpURLConnection)url.openConnection(); 
    urlConnection.setRequestMethod("GET"); 
    urlConnection.setRequestProperty("Content-Type", "application/json;charset=utf-8"); 

    String userCredentials = "username:password"; 
    String basicAuth = "Basic " + Base64.encodeToString(userCredentials.getBytes(), Base64.DEFAULT); 
    urlConnection.setRequestProperty("Authorization", basicAuth); 


    return urlConnection; 
} 

private String getResponse(HttpURLConnection urlConnection) throws IOException { 

    BufferedReader bufferedReader = null; 

    try { 

     if (urlConnection.getResponseCode() == HttpURLConnection.HTTP_OK) { 

      bufferedReader = new BufferedReader(new InputStreamReader(urlConnection.getInputStream())); 
      String inputLine; 
      StringBuffer response = new StringBuffer(); 

      while ((inputLine = bufferedReader.readLine()) != null) { 
       response.append(inputLine); 
      } 

      return response.toString(); 
     } 

    } catch (IOException e) { 

     Logger.error(e); 

    } finally { 

     if (bufferedReader != null) { 
      bufferedReader.close(); 
     } 
    } 
    return null; 
} 
0
import java.io.BufferedReader; 
import java.io.InputStreamReader; 
import java.net.Authenticator; 
import java.net.InetAddress; 
import java.net.PasswordAuthentication; 
import java.net.URL; 

public class Main { 
    public static void main(String[] argv) throws Exception { 
    Authenticator.setDefault(new MyAuthenticator()); 
    URL url = new URL("http://hostname:80/index.html"); 

BufferedReader in = new BufferedReader(new InputStreamReader(url.openStream())); 
String str; 
while ((str = in.readLine()) != null) { 
    System.out.println(str); 
} 
in.close(); 
} 
} 

class MyAuthenticator extends Authenticator { 

    protected PasswordAuthentication getPasswordAuthentication() { 
    String promptString = getRequestingPrompt(); 
    System.out.println(promptString); 
    String hostname = getRequestingHost(); 
    System.out.println(hostname); 
    InetAddress ipaddr = getRequestingSite(); 
    System.out.println(ipaddr); 
    int port = getRequestingPort(); 

    String username = "Administrator"; 
    String password = "Administrator"; 
    return new PasswordAuthentication(username, password.toCharArray()); 
    } 
} 

Проверить выше примере, если он работает для вас

Смежные вопросы