/ Odhlásenie / JSF pomocou session.invalidate nevymaže aktuálne užívateľské meno? - jsf, httpsession

Odhlásenie JSF pomocou session.invalidate nevymaže aktuálne používateľské meno? - jsf, httpsession

V mojej aplikácii JSF dostanem meno aktuálne prihláseného používateľa, ako je tento ...

public String getLoggedInUsername() {
return FacesContext.getCurrentInstance().getExternalContext().getRemoteUser();
}

... a skontrolujem, či je používateľ prihlásený takýmto spôsobom ...

public boolean isSignedIn() {
return (getLoggedInUsername() != null);
}

... a keď sa používateľ odhlási, urobím to ...

public String doLogout() {
FacesContext facesContext = FacesContext.getCurrentInstance();
HttpSession httpSession = (HttpSession)facesContext.getExternalContext().getSession(false);
httpSession.invalidate();
return "main";
}

Môj problém je po doLogout (), getLoggedInUsername () stále vracia meno prihláseného používateľa. Čo mám robiť, aby som sa ubezpečil, že getRemoteUser () sa po odhlásení vráti na nulu?

Existuje aj lepší spôsob, ako zistiť, či je isSignedIn (), než len skontrolovať používateľské meno?

Vďaka! olúpiť

odpovede:

16 pre odpoveď č. 1

Uistite sa, že žiadosť presmerujete pozneplatnenie relácie. Princíp užívateľa je vyriešený na základe atribútu relácie. Takže keď práve prechádzate na cieľovú stránku (ako v predvolenom nastavení ako prípad navigácie JSF), bude na cieľovej stránke stále, pretože používa rovnaký HttpSession referencie. Presmerovanie dá pokyn webový prehliadač, aby vystrelil úplne novú požiadavku HTTP, čím núti server znovu vytvoriť HttpSession odkaz založený na novej žiadosti.

pridať <redirect/> do navigačného puzdra núti JSF poslať presmerovanie. Alebo, keď už ste v JSF 2.0, pridajte ?faces-redirect=true na výslednú hodnotu.


0 pre odpoveď č. 2

Po volaní „session.invalidate ();“ , pridajte reťazec „request.logout ();“.

Metóda zneplatnenia objektu relácie iba čisté údaje relácie.

Odhlásenie metódy na objekte žiadosti nastaví na hodnotu null ako hodnotu vrátenú pri volaní getUserPrincipal, getRemoteUser a getAuthType.