Logout und forward beim Reload

Spamcop

Grünschnabel
Hallo zusammen. :)

Nachdem mir hier schon oft geholfen wurde und ich aber diesmal - leider - nicht fündig wurde, hab ich mich nun doch mal dazu entschlossen, mich zu registrieren. ^^

Nun, zu meinem Problem:

Der User loggt sich aus der Applikation aus, er wird auf die Logout-Seite (127.0.0.1:8080/logout.do) weitergeleitet. Das funktioniert auch alles ganz toll. Allerdings möchte ich nun, dass der User auf die Startseite weitergeleitet wird (127.0.0.1:8080/login.do), wenn folgende Punkte zutreffen:

- der User gibt die 127.0.0.1:8080/logout.do im Browser ein
- der User ist bereits auf der Logout-Seite und aktualisiert die Seite im Browser

Habe bzgl. der Logout-Seite folgendes ActionMapping in meiner struts-config.xml eingetragen:

<action path="/logout" type="bar.foo.struts.action.LogoutAction">
<forward name="logout" path="/WEB-INF/jsp/logout.jsp" />
</action>

Meine LogoutAction.java ist quasi noch jungfräulich... hier hab ich lediglich bisher das stehen:

[...]
public ActionForward execute(ActionMapping mapping, ActionForm form,
HttpServletRequest request, HttpServletResponse response) {

return mapping.findForward("logout");
[...]


Ich hab wirklich keine Ahnung, wo ich ansetzen soll/kann, damit ich mein Vorhaben realisieren kann. :/

Bin für jeden Vorschlag/Tipp dankbar. :>

Ciao und schöne Grüße
Spamcop
 
logout.do wird wahrscheinlich aufgerufen, wenn der Benutzer auf den logout button drückt.
Dann sollte die logoutAction zwei Sachen machen:
- Zerstören der Session oder Status setzten auf ausgelogt
- forward zu einer Seite, die erfolgreiches logout anzeigt - logout.jsp.

Für den Fall, dass logout.do ohne eine Session aufgerufen wird, durch Urleingabe oder browserrefresh, kann dies in logoutAction festgestellt werden.
Ist der Benutzer nicht im Status eingeloggt oder hat keine gültige Session kann dann nicht auf logout.jsp sondern auf login.jsp geforwardet werden.

Damit hätte man den direkten Aufruf der action bereinigt. Dass ein Benutzer direkt die logout.jsp aufruft sollte generell verboten werden und nur die Verwendung über die action zugelassen werden (kein mapping für die jsp bereitstellen und dynamischen aufrufe über /servlet/ auch verbieten).
 
Hey, hey.

Also, mein Sourcecode sieht mittlerweile so aus:

public class LogoutAction extends Action {
/*
* Generated Methods
*/

/**
* Method execute
*
* @param mapping
* @param form
* @param request
* @param response
* @return ActionForward
*/
public ActionForward execute(ActionMapping mapping, ActionForm form,
HttpServletRequest request, HttpServletResponse response) {

HttpSession session = request.getSession();
if (session.getAttribute("login.username") == null) {
return mapping.findForward("showLogin");
} else {
session.invalidate();
session.setAttribute("login.username",null);
return mapping.findForward("showLogout");
}
}
}

Wenn der User nicht eingeloggt ist, funktioniert das auch so, wie es soll. Allerdings haut der Logout nicht mehr hin. Die Session wird nicht zerstört... gar nichts. Aber es werden auch keinerlei Fehler geschmissen.

Any ideas? :)
 
Zurück