Methoden Website-URL im Browser öffnen nach erfolgreicher Basisauthentifizierung in Java

  • Themenstarter Themenstarter Gelöschtes Mitglied 65696
  • Beginndatum Beginndatum
G

Gelöschtes Mitglied 65696

Gast
Hey,
ich habe folgendes Problem nach viel Ausprobieren, Googlen und Testen...
Ich suche nach einer Möglichkeit, eine URL im Browser ohne Login Formular zu öffnen. Ich programmiere mit Java in Eclipse auf Win10. Das Thema an sich ist eine Online-Hilfe für unsere Software zu erstellen. Diese soll sich kontextsensitiv im Browser öffnen, wenn der Hilfe-Button innerhalb der Software angeklickt wird. Hierbei soll aber der Login in Confluence umgangen werden und direkt die Online-Hilfe angezeigt werden. Die entsprechende URL und Login-Daten poste ich aus Datenschutz gründen logischerweise nicht. Die Authentication erfolgt aktuell wie folgt:

[CODE lang="java" title="Authentication"]String authString = name + ":" + password;
System.out.println("Auth String: " + authString);
byte[] authEncBytes = Base64.encodeBase64(authString.getBytes());
String authStringEnc = new String(authEncBytes);
System.out.println("Base64 encoded auth string: " + authStringEnc);

URL url = new URL(webPage);
URLConnection urlConnection = url.openConnection();
urlConnection.setRequestProperty("Authorization", "Basic " + authStringEnc);[/CODE]

Die Authentifizierung ist erfolgreich, aber ich weiß nicht, wie ich die Cookies setzen oder die Sitzung an den Browser übertragen soll. Um den Browser zu öffnen, verwende ich derzeit diesen Code:

[CODE lang="java" title="Webseiten Aufruf mit Browser"]if (Desktop.isDesktopSupported() && Desktop.getDesktop().isSupported(Desktop.Action.BROWSE)) {
try {
Desktop.getDesktop().browse(new URI(webPage + "/login.action" + "?os_username=" + name + "&" + "os_password=" + password));
} catch (IOException e) {
e.printStackTrace();
} catch (URISyntaxException e) {
e.printStackTrace();
}
}[/CODE]

Dieses Verfahren ist jedoch viel zu unsicher, da die Anmeldedaten in der URL unverschlüsselt sind. Ich weiß nicht, ob es überhaupt möglich ist, eine in Java authentifizierte Website über den Browser aufzurufen. Ich hab das ganze Internet abgesucht aber nichts gefunden, das jetzt irgendwie beim Aufruf des Browser irgendwelche Header-Daten mit übergibt oder Cookies setzt etc. Ich brauch Hilfe bitte. 🙂 Danke im vorraus!
 
Kannst du die Hilfeseite nicht einfach in einem WebView anzeigen?
Ja das wäre halt jetzt die alternative Option die ich denke ich mal ausprobieren werde. Aber kenn mich mit WebViews auch nicht so aus ob man in denen umher navigieren kann oder nicht. Muss ich mir mal einen alternativ Plan ausdenken.
 
Du könntest Jetty als eingebetteten Server betreiben. Wie das geht findest du z.B.: https://www.baeldung.com/jetty-embedded
dieser Server könnte sich die Hilfeseiten vom Confluence mit Login abholen (womöglich auch lokal cachen) und dann ohne Login ausgeben bzw. tunneln. Der Browser am Client müsste dann http://localhost:port/hilfe öffnen.
Problematisch sehe ich dabei aber, dass der Login im Programm bzw. irgend wie lokal im Klartext vorgehalten werden muss. Wäre es nicht viel einfacher dem Kunden einen "NUR-LESE-ACCOUNT" im Confluence bereitzustellen, mit welchem er auf die betreffenden Seiten zugreifen kann.
 
Du könntest Jetty als eingebetteten Server betreiben. Wie das geht findest du z.B.: https://www.baeldung.com/jetty-embedded
dieser Server könnte sich die Hilfeseiten vom Confluence mit Login abholen (womöglich auch lokal cachen) und dann ohne Login ausgeben bzw. tunneln. Der Browser am Client müsste dann http://localhost:port/hilfe öffnen.
Problematisch sehe ich dabei aber, dass der Login im Programm bzw. irgend wie lokal im Klartext vorgehalten werden muss. Wäre es nicht viel einfacher dem Kunden einen "NUR-LESE-ACCOUNT" im Confluence bereitzustellen, mit welchem er auf die betreffenden Seiten zugreifen kann.
Das Problem hierbei ist selbst wenn er einen "NUR-LESE-ACCOUNT" in Confluence hätte müsste man sich irgendwie in diesen einloggen...
 
Da wir eine Java Swing Anwendung haben war es nicht so einfach die JFX WebView einzubinden aber es hat funktioniert!

[CODE lang="java" title="Authorization und Aufruf"]
JFrame frame = new JFrame("Online-Help");
final JFXPanel fxPanel = new JFXPanel();
fxPanel.setSize(1920, 1080);
frame.setSize(1920, 1080);
frame.add(fxPanel);
frame.setVisible(true);

String authString = name + ":" + password;
System.out.println("Auth String: " + authString);
byte[] authEncBytes = Base64.encodeBase64(authString.getBytes());
String authStringEnc = new String(authEncBytes);
System.out.println("Base64 encoded auth string: " + authStringEnc);
WebEngine webEngine = webView.getEngine();
webEngine.setUserAgent("foo\nAuthorization: Basic " + authStringEnc);

webView.getEngine().load(webPage);
webView.setPrefWidth(1920);
webView.setPrefHeight(1080);
fxPanel.setScene(scene);
fxPanel.setVisible(true);[/CODE]

Die Webseite wird mithilfe der WebEngine und Base64 codierten Zugangsdaten authorisiert. Anschließend wird die Homepage innerhalb der WebView aufgerufen.
 
Kennt Confluence keine öffentlichen Seiten?

Ansonsten wäre es vielleicht eine Idee, die Doku für externe gar nicht in Confluence zu veröffentlichen, sondern "irgendwo anders", wo man problemlos drauf zugreifen kann.
 

Zurück
Oben