From bb9b4d40a91290bcb92a5a45704482bd84e73a2e Mon Sep 17 00:00:00 2001
From: Julian Hochstetter <julian.hochstetter@mni.thm.de>
Date: Tue, 11 Sep 2012 10:31:32 +0200
Subject: [PATCH] =?UTF-8?q?Task=20#3848:=20Ein=20Logout=20soll=20den=20Ben?=
 =?UTF-8?q?utzer=20korrekt=20zu=20ARSnova=20zur=C3=BCck=20leiten?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 .../java/de/thm/arsnova/LoginController.java  |  6 ++---
 .../controller/LoginControllerTest.java       | 23 +++++++++++++++++++
 2 files changed, 26 insertions(+), 3 deletions(-)

diff --git a/src/main/java/de/thm/arsnova/LoginController.java b/src/main/java/de/thm/arsnova/LoginController.java
index 011769f5c..aaca84f48 100644
--- a/src/main/java/de/thm/arsnova/LoginController.java
+++ b/src/main/java/de/thm/arsnova/LoginController.java
@@ -115,12 +115,12 @@ public class LoginController {
 	}
 
 	@RequestMapping(method = RequestMethod.GET, value = "/logout")
-	public ModelAndView doLogout(final HttpServletRequest request) {
+	public View doLogout(final HttpServletRequest request) {
 		Authentication auth = SecurityContextHolder.getContext().getAuthentication();
 		request.getSession().invalidate();
 		if (auth instanceof CasAuthenticationToken) {
-			return new ModelAndView("redirect:/j_spring_cas_security_logout");
+			return new RedirectView("/j_spring_cas_security_logout");
 		}
-		return new ModelAndView("redirect:/");
+		return new RedirectView(request.getHeader("referer") != null ? request.getHeader("referer") : "/" );
 	}
 }
diff --git a/src/test/java/de/thm/arsnova/controller/LoginControllerTest.java b/src/test/java/de/thm/arsnova/controller/LoginControllerTest.java
index 3c1e97a4b..8f771dbf7 100644
--- a/src/test/java/de/thm/arsnova/controller/LoginControllerTest.java
+++ b/src/test/java/de/thm/arsnova/controller/LoginControllerTest.java
@@ -92,4 +92,27 @@ public class LoginControllerTest extends AbstractSpringContextTestBase {
 		assertEquals("Guest1234567890", ((User)mav.getModel().get("user")).getUsername());
 	}
 
+	@Test
+	public void testLogoutWithoutRedirect() throws Exception {
+		request.setMethod("GET");
+		request.setRequestURI("/logout");
+		final ModelAndView mav = handle(request, response);
+		assertNotNull(mav);
+		assertNotNull(mav.getView());
+		RedirectView view = (RedirectView) mav.getView();
+		assertEquals("/", view.getUrl());
+	}
+	
+	@Test
+	public void testLogoutWithRedirect() throws Exception {
+		request.setMethod("GET");
+		request.setRequestURI("/logout");
+		request.addHeader("referer", "/dojo-index.html");
+
+		final ModelAndView mav = handle(request, response);
+		assertNotNull(mav);
+		assertNotNull(mav.getView());
+		RedirectView view = (RedirectView) mav.getView();
+		assertEquals("/dojo-index.html", view.getUrl());
+	}
 }
-- 
GitLab