JSOUP / Shiro und SessionId

internet

Top Contributor
Hallo,

ich habe eine Frage zu JSOUP und Sessions bzw. Aufruf von HTML Seiten, die geschützt sind.

Ich möchte das HTML von einer Seite auslesen, was auch prinzipiell funktioniert.
Nun ist es aber so, dass ich eine Seite auslesen möchte, die geschützt ist und zuvor ein Login notwendig ist.
Ich verwende hierzu Apache Shiro.

In Shiro generiere ich mir ein "Subject", welches ich auch durch den Ussername erstellen kann:
Java:
        Factory<SecurityManager> factory = new IniSecurityManagerFactory("classpath:shiro-web.ini");
        SecurityManager securityManager = factory.getInstance();
        SecurityUtils.setSecurityManager(securityManager);
        Object userIdentity = "myemailAddress";
        String realmName = "jdbcRealm";
        PrincipalCollection principals = new SimplePrincipalCollection(userIdentity, realmName);
        Subject subject = new Subject.Builder().authenticated(true).principals(principals).buildSubject();

In der Config von Apache Shiro verwende ich das hier:
Java:
sessionIdCookie=org.apache.shiro.web.servlet.SimpleCookie
sessionIdCookie.httpOnly = true
sessionIdCookie.name = sid
sessionIdCookie.domain = localhost

Ich kenne mich mit Sessions nicht so wirklich aus, aber sollte ich Zugriff auf die Seite haben, wenn ich die SessionId habe und dieser der URL anhänge?

Also sowas wie:
Java:
http://localhost:8080/mypage.jsf;JSESSION=12132445849445646
oder
http://localhost:8080/mypage.jsf;sid=12132445849445646

Auch das hier habe ich schon probiert: (HTML Unit verwende ich hier)
Java:
    WebClient webClient = new WebClient(BrowserVersion.BEST_SUPPORTED);
        webClient.getOptions().setJavaScriptEnabled(true); // enable javascript
        webClient.getOptions().setThrowExceptionOnScriptError(false); // even if there is error in js continue
        webClient.waitForBackgroundJavaScript(10000); // important! wait until javascript finishes rendering
        HtmlPage page = webClient.getPage(urlStr);

        Cookie cookie = new Cookie("localhost", "sid", sessionId.toString());
        webClient.getCookieManager().addCookie(cookie);

        String htmlCode = page.getWebResponse().getContentAsString();
        doc = Jsoup.parse(htmlCode);

Wenn ich das probiere, wird der Request auf die Loginseite weitergeleitet, und mein HTML Code ist der Code er Loginseite.

Hat jemand eine Idee?

Danke
 

LimDul

Top Contributor
Du musst das halt so machen, wie die Seite es verlangt.
Das heißt, ob es per URL geht, legt die Seite fest (Oft geht das nicht)
Und ob das wirklich sid heißt, ist auch nicht klar.

Im Endeffekt musst du mal einen normalen Login mitschneiden - z.B. mit den Chrome Developer Tools - und schauen was passiert.
 

internet

Top Contributor
Du musst das halt so machen, wie die Seite es verlangt.
Das heißt, ob es per URL geht, legt die Seite fest (Oft geht das nicht)
Und ob das wirklich sid heißt, ist auch nicht klar.

Im Endeffekt musst du mal einen normalen Login mitschneiden - z.B. mit den Chrome Developer Tools - und schauen was passiert.

Die Seite läuft innerhalb meiner eigenen Applikation.

Ich gebe den Name "sid" doch vor:
Java:
sessionIdCookie.name = sid

Aber ich bin dem Shiro User doch bereits eingeloggt und habe somit eine Session & authenticated = true.
 

mrBrown

Super-Moderator
Mitarbeiter
Du setzt die Cookies doch erst nach dem Request:

Java:
HtmlPage page = webClient.getPage(urlStr);                            // <- Anfrage an den Server
Cookie cookie = new Cookie("localhost", "sid", sessionId.toString()); 
webClient.getCookieManager().addCookie(cookie);                       // <- Setzen der Cookies


(BTW klingt es sehr abenteuerlich, aus deiner Applikation per HTML auf die Applikation selbst zuzugreifen...)
 

Ähnliche Java Themen

Neue Themen


Oben