From 18d426cfa838aaaa685aa70d228ac878dddc0ac8 Mon Sep 17 00:00:00 2001
From: Julian Hochstetter <julian.hochstetter@mni.thm.de>
Date: Mon, 10 Sep 2012 13:08:40 +0200
Subject: [PATCH] Task #3833

---
 .../LoginAuthenticationSucessHandler.java     | 27 +++++++++++++++++++
 .../java/de/thm/arsnova/LoginController.java  |  1 +
 .../webapp/WEB-INF/spring/spring-security.xml |  5 ++--
 3 files changed, 30 insertions(+), 3 deletions(-)
 create mode 100644 src/main/java/de/thm/arsnova/LoginAuthenticationSucessHandler.java

diff --git a/src/main/java/de/thm/arsnova/LoginAuthenticationSucessHandler.java b/src/main/java/de/thm/arsnova/LoginAuthenticationSucessHandler.java
new file mode 100644
index 000000000..08d947c82
--- /dev/null
+++ b/src/main/java/de/thm/arsnova/LoginAuthenticationSucessHandler.java
@@ -0,0 +1,27 @@
+package de.thm.arsnova;
+
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import javax.servlet.http.HttpSession;
+
+import org.springframework.security.web.authentication.SimpleUrlAuthenticationSuccessHandler;
+
+public class LoginAuthenticationSucessHandler extends SimpleUrlAuthenticationSuccessHandler {
+
+	private String targetUrl;
+	
+	@Override
+	protected String determineTargetUrl(HttpServletRequest request,
+			HttpServletResponse response) {
+		HttpSession session = request.getSession();
+		if (session == null || session.getAttribute("ars-referer") == null) {
+			return targetUrl;
+		}
+		String referer = (String) session.getAttribute("ars-referer");
+		return referer + targetUrl;
+	}
+	
+	public void setTargetUrl(String targetUrl) {
+		this.targetUrl = targetUrl;
+	}
+}
diff --git a/src/main/java/de/thm/arsnova/LoginController.java b/src/main/java/de/thm/arsnova/LoginController.java
index da87bc2ee..231e37488 100644
--- a/src/main/java/de/thm/arsnova/LoginController.java
+++ b/src/main/java/de/thm/arsnova/LoginController.java
@@ -75,6 +75,7 @@ public class LoginController {
 	@RequestMapping(method = RequestMethod.GET, value = "/doLogin")
 	public ModelAndView doLogin(@RequestParam("type") String type, HttpServletRequest request, HttpServletResponse response)
 			throws IOException, ServletException {
+		request.getSession().setAttribute("ars-referer", request.getHeader("referer"));
 		if("cas".equals(type)) {
 			casEntryPoint.commence(request, response, null);
 		} else if("twitter".equals(type)) {
diff --git a/src/main/webapp/WEB-INF/spring/spring-security.xml b/src/main/webapp/WEB-INF/spring/spring-security.xml
index 1e630afba..665e0d504 100644
--- a/src/main/webapp/WEB-INF/spring/spring-security.xml
+++ b/src/main/webapp/WEB-INF/spring/spring-security.xml
@@ -124,9 +124,8 @@
 	    </constructor-arg>
 	</bean>
 
-	<bean id="successHandler" class="org.springframework.security.web.authentication.SavedRequestAwareAuthenticationSuccessHandler"
-	    p:alwaysUseDefaultTargetUrl="false"
-	    p:defaultTargetUrl="/#auth/checkLogin"/>
+	<bean id="successHandler" class="de.thm.arsnova.LoginAuthenticationSucessHandler"
+	    p:targetUrl="#auth/checkLogin"/>
 
     <bean id="failureHandler"
         class="org.springframework.security.web.authentication.SimpleUrlAuthenticationFailureHandler">
-- 
GitLab