From 5e8268a28167130bfdb48bc556a527c755e24fe2 Mon Sep 17 00:00:00 2001 From: Paul-Christian Volkmer <paul-christian.volkmer@mni.thm.de> Date: Tue, 4 Jun 2013 18:13:18 +0200 Subject: [PATCH] Added simple session scoped bean to hold user and session This bean holds user and session object of the current user after he joins a session and could be used to access those objects within the application. Added two simple URIs to get a JSON representation of the referenced objects. --- .../arsnova/controller/LoginController.java | 17 +++++++++ .../arsnova/controller/SessionController.java | 9 ++++- .../arsnova/services/UserSessionService.java | 14 ++++++++ .../services/UserSessionServiceImpl.java | 35 +++++++++++++++++++ src/test/resources/test-config.xml | 10 ++++++ 5 files changed, 84 insertions(+), 1 deletion(-) create mode 100644 src/main/java/de/thm/arsnova/services/UserSessionService.java create mode 100644 src/main/java/de/thm/arsnova/services/UserSessionServiceImpl.java diff --git a/src/main/java/de/thm/arsnova/controller/LoginController.java b/src/main/java/de/thm/arsnova/controller/LoginController.java index 9fd538ab..40e8b3bd 100644 --- a/src/main/java/de/thm/arsnova/controller/LoginController.java +++ b/src/main/java/de/thm/arsnova/controller/LoginController.java @@ -51,8 +51,10 @@ import org.springframework.web.bind.annotation.ResponseBody; import org.springframework.web.servlet.View; import org.springframework.web.servlet.view.RedirectView; +import de.thm.arsnova.entities.Session; import de.thm.arsnova.entities.User; import de.thm.arsnova.services.IUserService; +import de.thm.arsnova.services.UserSessionService; @Controller public class LoginController extends AbstractController { @@ -73,6 +75,9 @@ public class LoginController extends AbstractController { @Autowired private IUserService userService; + + @Autowired + private UserSessionService userSessionService; public static final Logger LOGGER = LoggerFactory.getLogger(LoginController.class); @@ -154,4 +159,16 @@ public class LoginController extends AbstractController { } return new RedirectView(request.getHeader("referer") != null ? request.getHeader("referer") : "/"); } + + @RequestMapping(value = { "/test/me" }, method = RequestMethod.GET) + @ResponseBody + public final User me() { + return userSessionService.getUser(); + } + + @RequestMapping(value = { "/test/mysession" }, method = RequestMethod.GET) + @ResponseBody + public final Session mysession() { + return userSessionService.getSession(); + } } diff --git a/src/main/java/de/thm/arsnova/controller/SessionController.java b/src/main/java/de/thm/arsnova/controller/SessionController.java index 6d46ace9..59b9e529 100644 --- a/src/main/java/de/thm/arsnova/controller/SessionController.java +++ b/src/main/java/de/thm/arsnova/controller/SessionController.java @@ -43,6 +43,7 @@ import de.thm.arsnova.entities.Session; import de.thm.arsnova.entities.User; import de.thm.arsnova.services.ISessionService; import de.thm.arsnova.services.IUserService; +import de.thm.arsnova.services.UserSessionService; import de.thm.arsnova.services.SessionService.SessionNameComperator; import de.thm.arsnova.services.SessionService.SessionShortNameComperator; @@ -58,10 +59,16 @@ public class SessionController extends AbstractController { @Autowired private IUserService userService; + @Autowired + private UserSessionService userSessionService; + @RequestMapping(value = "/{sessionkey}", method = RequestMethod.GET) @ResponseBody public final Session joinSession(@PathVariable final String sessionkey) { - return sessionService.joinSession(sessionkey); + Session session = sessionService.joinSession(sessionkey); + userSessionService.setUser(userService.getCurrentUser()); + userSessionService.setSession(session); + return session; } @RequestMapping(value = "/{sessionkey}", method = RequestMethod.DELETE) diff --git a/src/main/java/de/thm/arsnova/services/UserSessionService.java b/src/main/java/de/thm/arsnova/services/UserSessionService.java new file mode 100644 index 00000000..ea5b0968 --- /dev/null +++ b/src/main/java/de/thm/arsnova/services/UserSessionService.java @@ -0,0 +1,14 @@ +package de.thm.arsnova.services; + +import de.thm.arsnova.entities.Session; +import de.thm.arsnova.entities.User; + +public interface UserSessionService { + + void setUser(User user); + User getUser(); + + void setSession(Session session); + Session getSession(); + +} \ No newline at end of file diff --git a/src/main/java/de/thm/arsnova/services/UserSessionServiceImpl.java b/src/main/java/de/thm/arsnova/services/UserSessionServiceImpl.java new file mode 100644 index 00000000..cbc8bc20 --- /dev/null +++ b/src/main/java/de/thm/arsnova/services/UserSessionServiceImpl.java @@ -0,0 +1,35 @@ +package de.thm.arsnova.services; + +import org.springframework.context.annotation.Scope; +import org.springframework.stereotype.Component; + +import de.thm.arsnova.entities.Session; +import de.thm.arsnova.entities.User; + +@Component +@Scope("session") +public class UserSessionServiceImpl implements UserSessionService { + + private User user; + private Session session; + + @Override + public void setUser(User u) { + this.user = u; + } + + @Override + public User getUser() { + return user; + } + + @Override + public void setSession(Session s) { + this.session = s; + } + + @Override + public Session getSession() { + return this.session; + } +} diff --git a/src/test/resources/test-config.xml b/src/test/resources/test-config.xml index 1ef56bd0..1b6ae97a 100644 --- a/src/test/resources/test-config.xml +++ b/src/test/resources/test-config.xml @@ -17,4 +17,14 @@ </bean> <bean id="userService" class="de.thm.arsnova.services.StubUserService" /> + + <bean class="org.springframework.beans.factory.config.CustomScopeConfigurer"> + <property name="scopes"> + <map> + <entry key="session"> + <bean class="org.springframework.context.support.SimpleThreadScope"/> + </entry> + </map> + </property> + </bean> </beans> -- GitLab