# Redirect nach Aufruf einer JSP



## FlyingHirsch (16. Apr 2009)

Hallo. 

Ich bräuchte bitte Hilfe bei folgendem Problem.

Der User loggt sich aus der Applikationn aus... und wird dann auf http://192.168.2.42/logout.do weitergeleitet. 

Das funktioniert auch alles so, wie ich mir das vorgestellt hab.

Wenn der User nun F5/Aktualisieren drückt, oder die o.g. URL im Browser aufrufen sollte, stelle ich mir einen Redirect auf die Startseite vor, also http://192.168.2.42/home.do

In meiner struts-config.xml hab ich für die Logout-JSP folgenden Eintrag, evtl. ist dies für die Problemlösung wichtig:

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

Vielen Dank und schöne Grüße
FlyingHirsch


----------



## maki (16. Apr 2009)

Nun, deine JSP liegt unter WEB-INF, d.h. dass der User sie nie direkt aufrufen kann, sondern nur über den Umweg über den Controller. Letzterer (oder ein Filter) kann ja prüfen ob eine gültige Session vorhanden ist und wenn nicht, zur Login Seite Umleiten.


----------



## FlyingHirsch (16. Apr 2009)

Hi,

da fällt mir grad ein, würde mein Vorhaben auch mit "response.sendRedirect()" funktionieren?

Edit: also quasi so: 

<%
      String destination  ="/jsp/destination.jsp";        
      response.sendRedirect(response.encodeRedirectURL(destination));
%>


----------



## maki (16. Apr 2009)

Damit schickt man einen Redirect an Client.


----------



## FlyingHirsch (7. Mai 2009)

Hey. 

Habs jetzt mittlerweile so gelöst:

public class LogoutAction extends Action {

	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 {
			return mapping.findForward("showlogout");
		}
	}
}


Das funktioniert aber leider auch nur so wie ich das will, solange man nicht eingeloggt ist.

Das jetztige Problem: Ich bin eingeloggt, klicke auf Logout ... und die Session wird nich zerstört... (die Session wird in ner JSP-Datei zerstört...)

Hm... any ideas?


----------



## HLX (8. Mai 2009)

FlyingHirsch hat gesagt.:


> Das jetztige Problem: Ich bin eingeloggt, klicke auf Logout ... und die Session wird nich zerstört... (die Session wird in ner JSP-Datei zerstört...)
> 
> Hm... any ideas?



Die Session sollte nicht in der JSP-Datei zerstört werden, sondern in einer Action. Da du schon Struts verwendest, solltest du versuchen das MVC-Prinzip einzuhalten und Anwendungslogik aus den JSP-Seiten fern zu halten. 

Die von dir implementierte Gültigkeitsabfrage einer Session sollte grundsätzlich bei jedem Aufruf durchgeführt werden. Hier gibt es zwei Möglichkeiten:
1. Du erstellst eine Basis-Actionklasse (abgeleitet von Action), von der alle deine anderen Actions erben Die Basis-Actionklasse stellt die Gültigkeitsabfrage zur Verfügung
2. Du verwendest einen Servlet-Filter, der vor Erreichen aller Actions die Gültigkeitsabfrage durchführt und per RequestDispatcher abzweigt


----------

