HttpURLConnection und Authenticator

Fohnbit

Top Contributor
Hallo,

ich rufe Daten über eine Webseite ab, und muss mich mit Username und Password authentifizieren.
Das klappt an sich, aber scheinbar wird nach einem Login der Status oder die Authentifizierung gechached.

Wenn ich mich einmal erfolgreich authentifiziere und danach das Passwort ändere und den selben Abruf nochmal mache, klappt es dennoch!

Wenn ich das erste mal falsche Login Daten eingebe, erhalte ich natürlich ein Login Error ... aber stelle ich das Login dann richtig, klappt es dennoch nicht. Ich muss mein Tool neu starten.

Die Authentifizierungs Zeile:

Java:
    Authenticator.setDefault(new Authenticator() {
                protected PasswordAuthentication getPasswordAuthentication() {
                    return new PasswordAuthentication(user, pass.toCharArray());
                }
            });
 

max40

Bekanntes Mitglied
@VfL_Freak: wenn Fohnbit hier nicht mehr antwortet, liegt es daran das er immernoch auf deinen 1. Link klickt.

@Fohnbit: ggf. solltest du mehr code zeigen. Woher kommt user und pass, wann werden die gesetzt? Wie gehst du vor wenn du in deinem Tool den user und passwort neu angibst?
 

KaffeeFan

Bekanntes Mitglied
Hey Fohnbit,

ich kenne die Authenticator-Klasse nicht, daher kann ich dir speziell dabei nicht helfen.
Ich realisiere soetwas meistens mit HttpAuthenticationFeature:

Pseudo:
Java:
  private String uri;
  private String user;
  private String password;
  private Client client;

  public WebserviceClient(String aUri, String aUser, String aPassword)
  {
    uri = aUri;
    user = aUser;
    password = aPassword;

    renew();
  }

  public void renew()
  {
    HttpAuthenticationFeature feature = HttpAuthenticationFeature.universalBuilder()
            .credentialsForBasic(user, password)
            .credentials(user, password).build();

    client = ClientBuilder.newClient();
    client.register(feature);
  }

Gruß
Luk
 

Fohnbit

Top Contributor
Hallo,

das mit dem ersten Link habe ich schon gesehen :)

Anbei die ganze Methode:
Java:
public void run() {

        try {

            Authenticator.setDefault(new Authenticator() {
                protected PasswordAuthentication getPasswordAuthentication() {
                    return new PasswordAuthentication(user, pass.toCharArray());
                }
            });

            String url = "https://****/update?hostname=" + hostname;
            URL obj = new URL(url);
            HttpURLConnection con = (HttpURLConnection) obj.openConnection();
            con.setConnectTimeout(5000);
            con.setRequestMethod("GET");
            con.setRequestProperty("User-Agent", USER_AGENT);
            int responseCode = con.getResponseCode();

            BufferedReader in = new BufferedReader(new InputStreamReader(
                    con.getInputStream()));
            String inputLine;
            StringBuffer response = new StringBuffer();

            while ((inputLine = in.readLine()) != null) {
                response.append(inputLine);
            }
            in.close();
            con.disconnect();

            if (response.toString().startsWith("good")) {
                updateIPListener.updateIPListener(true, responseCode,
                        response.toString());
            } else {
                updateIPListener.updateIPListener(false, responseCode,
                        response.toString());
            }

        } catch (Exception e) {
            e.printStackTrace();
            updateIPListener.updateIPListener(false, -1, e.getMessage());
        }
    }
 

Fohnbit

Top Contributor
Hallo,

hab meinen Code nun wie folgt abgeändert:
Java:
            String authStr = user + ":" + pass;
            String authEncoded = Base64.encodeBytes(authStr.getBytes());
            String url = "https://xy.de/update?hostname=" + hostname;
            URL obj = new URL(url);
            HttpURLConnection con = (HttpURLConnection) obj.openConnection();
            con.setConnectTimeout(5000);
            con.setRequestMethod("GET");
            con.setRequestProperty("User-Agent", USER_AGENT);
            con.setRequestProperty("Authorization", "Basic " + authEncoded);
           
            int responseCode = con.getResponseCode();

            BufferedReader in = new BufferedReader(new InputStreamReader(
                    con.getInputStream()));
            String inputLine;
            StringBuffer response = new StringBuffer();

            while ((inputLine = in.readLine()) != null) {
                response.append(inputLine);
            }
            in.close();
            con.disconnect();

Nun klappt es .. die Base64 habe von hier:
http://iharder.sourceforge.net/current/java/base64/
 

Ähnliche Java Themen

Neue Themen


Oben