From a279b7d4a2c46c51859595ff9493e1d5c77bcf39 Mon Sep 17 00:00:00 2001 From: Michael Hunger Date: Tue, 8 Nov 2011 15:10:04 +0100 Subject: [PATCH] replaced CineastsUserDetailsService with a custom UserRepository-Implementation --- .../cineasts/controller/AuthController.java | 6 ++-- .../cineasts/controller/MovieController.java | 9 ++---- .../cineasts/controller/UserController.java | 13 ++++---- .../CineastsUserDetailsService.java | 10 +++--- .../cineasts/repository/UserRepository.java | 3 +- .../UserRepositoryImpl.java} | 32 +++++++------------ .../cineasts/service/CineastsRepository.java | 19 ----------- .../WEB-INF/applicatioContext-security.xml | 2 +- .../webapp/WEB-INF/applicationContext.xml | 3 +- .../org/neo4j/cineasts/domain/DomainTest.java | 1 - .../cineasts/service/TransactionTest.java | 8 ++--- .../test/resources/movies-test-context.xml | 2 +- 12 files changed, 38 insertions(+), 70 deletions(-) rename spring-data-neo4j-examples/cineasts/src/main/java/org/neo4j/cineasts/{service => repository}/CineastsUserDetailsService.java (73%) rename spring-data-neo4j-examples/cineasts/src/main/java/org/neo4j/cineasts/{service/CineastsUserDetailsServiceImpl.java => repository/UserRepositoryImpl.java} (74%) delete mode 100644 spring-data-neo4j-examples/cineasts/src/main/java/org/neo4j/cineasts/service/CineastsRepository.java diff --git a/spring-data-neo4j-examples/cineasts/src/main/java/org/neo4j/cineasts/controller/AuthController.java b/spring-data-neo4j-examples/cineasts/src/main/java/org/neo4j/cineasts/controller/AuthController.java index 48d7d7c4d..40ff0fcfe 100644 --- a/spring-data-neo4j-examples/cineasts/src/main/java/org/neo4j/cineasts/controller/AuthController.java +++ b/spring-data-neo4j-examples/cineasts/src/main/java/org/neo4j/cineasts/controller/AuthController.java @@ -1,7 +1,7 @@ package org.neo4j.cineasts.controller; -import org.neo4j.cineasts.service.CineastsUserDetailsService; +import org.neo4j.cineasts.repository.UserRepository; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; @@ -21,7 +21,7 @@ public class AuthController { private final static Logger logger = LoggerFactory.getLogger(AuthController.class); @Autowired - CineastsUserDetailsService userDetailsService; + UserRepository userRepository; @RequestMapping(value = "/login", method = RequestMethod.GET) public String login(@RequestParam(value = "login_error", required = false) boolean error, Model model) { logger.debug("Received request to show login page, error "+error); @@ -39,7 +39,7 @@ public class AuthController { Model model) { try { - userDetailsService.register(login,name,password); + userRepository.register(login,name,password); return "forward:/user/"+login; } catch(Exception e) { model.addAttribute("j_username",login); diff --git a/spring-data-neo4j-examples/cineasts/src/main/java/org/neo4j/cineasts/controller/MovieController.java b/spring-data-neo4j-examples/cineasts/src/main/java/org/neo4j/cineasts/controller/MovieController.java index 59010feba..011bae330 100644 --- a/spring-data-neo4j-examples/cineasts/src/main/java/org/neo4j/cineasts/controller/MovieController.java +++ b/spring-data-neo4j-examples/cineasts/src/main/java/org/neo4j/cineasts/controller/MovieController.java @@ -7,7 +7,6 @@ import org.neo4j.cineasts.domain.User; import org.neo4j.cineasts.repository.MovieRepository; import org.neo4j.cineasts.repository.PersonRepository; import org.neo4j.cineasts.repository.UserRepository; -import org.neo4j.cineasts.service.CineastsUserDetailsService; import org.neo4j.cineasts.service.DatabasePopulator; import org.neo4j.helpers.collection.IteratorUtil; import org.slf4j.Logger; @@ -37,8 +36,6 @@ public class MovieController { @Autowired private UserRepository userRepository; @Autowired - private CineastsUserDetailsService userDetailsService; - @Autowired Neo4jOperations template; @Autowired private DatabasePopulator populator; @@ -76,17 +73,17 @@ public class MovieController { @RequestMapping(value = "/movies/{movieId}", method = RequestMethod.POST, headers = "Accept=text/html") public String updateMovie(Model model, @PathVariable String movieId, @RequestParam(value = "rated",required = false) Integer stars, @RequestParam(value = "comment",required = false) String comment) { Movie movie = movieRepository.findById(movieId); - User user = userDetailsService.getUserFromSession(); + User user = userRepository.getUserFromSession(); if (user != null && movie != null) { int stars1 = stars==null ? -1 : stars; String comment1 = comment!=null ? comment.trim() : null; - userDetailsService.rate(movie, user, stars1, comment1); + userRepository.rate(movie, user, stars1, comment1); } return singleMovieView(model,movieId); } private User addUser(Model model) { - User user = userDetailsService.getUserFromSession(); + User user = userRepository.getUserFromSession(); model.addAttribute("user", user); return user; } diff --git a/spring-data-neo4j-examples/cineasts/src/main/java/org/neo4j/cineasts/controller/UserController.java b/spring-data-neo4j-examples/cineasts/src/main/java/org/neo4j/cineasts/controller/UserController.java index 05bb133c6..ca6e565dc 100644 --- a/spring-data-neo4j-examples/cineasts/src/main/java/org/neo4j/cineasts/controller/UserController.java +++ b/spring-data-neo4j-examples/cineasts/src/main/java/org/neo4j/cineasts/controller/UserController.java @@ -3,7 +3,7 @@ package org.neo4j.cineasts.controller; import org.neo4j.cineasts.domain.User; import org.neo4j.cineasts.repository.MovieRepository; -import org.neo4j.cineasts.service.CineastsUserDetailsService; +import org.neo4j.cineasts.repository.UserRepository; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; @@ -19,7 +19,8 @@ import org.springframework.web.bind.annotation.RequestMethod; @Controller public class UserController { - @Autowired CineastsUserDetailsService userDetailsService; + @Autowired + UserRepository userRepository; @Autowired MovieRepository movieRepository; @@ -27,7 +28,7 @@ public class UserController { @RequestMapping(value = "/user", method = RequestMethod.GET) public String profile(Model model) { - final User user = userDetailsService.getUserFromSession(); + final User user = userRepository.getUserFromSession(); model.addAttribute("user", user); if (user!=null) { model.addAttribute("recommendations", movieRepository.getRecommendations(user)); @@ -37,14 +38,14 @@ public class UserController { @RequestMapping(value = "/user/{login}/friends", method = RequestMethod.POST) public String addFriend(Model model, @PathVariable("login") String login) { - userDetailsService.addFriend(login); + userRepository.addFriend(login, userRepository.getUserFromSession()); return "forward:/user/"+login; } @RequestMapping(value = "/user/{login}") public String publicProfile(Model model, @PathVariable("login") String login) { - User profiled = userDetailsService.findUser(login); - User user = userDetailsService.getUserFromSession(); + User profiled = userRepository.findByLogin(login); + User user = userRepository.getUserFromSession(); return publicProfile(model, profiled, user); } diff --git a/spring-data-neo4j-examples/cineasts/src/main/java/org/neo4j/cineasts/service/CineastsUserDetailsService.java b/spring-data-neo4j-examples/cineasts/src/main/java/org/neo4j/cineasts/repository/CineastsUserDetailsService.java similarity index 73% rename from spring-data-neo4j-examples/cineasts/src/main/java/org/neo4j/cineasts/service/CineastsUserDetailsService.java rename to spring-data-neo4j-examples/cineasts/src/main/java/org/neo4j/cineasts/repository/CineastsUserDetailsService.java index b4c7c7243..920cfc43d 100644 --- a/spring-data-neo4j-examples/cineasts/src/main/java/org/neo4j/cineasts/service/CineastsUserDetailsService.java +++ b/spring-data-neo4j-examples/cineasts/src/main/java/org/neo4j/cineasts/repository/CineastsUserDetailsService.java @@ -1,10 +1,10 @@ -package org.neo4j.cineasts.service; +package org.neo4j.cineasts.repository; import org.neo4j.cineasts.domain.Movie; import org.neo4j.cineasts.domain.Rating; import org.neo4j.cineasts.domain.User; +import org.neo4j.cineasts.service.CineastsUserDetails; import org.springframework.dao.DataAccessException; -import org.springframework.security.core.userdetails.UserDetails; import org.springframework.security.core.userdetails.UserDetailsService; import org.springframework.security.core.userdetails.UsernameNotFoundException; import org.springframework.transaction.annotation.Transactional; @@ -15,9 +15,7 @@ import org.springframework.transaction.annotation.Transactional; */ public interface CineastsUserDetailsService extends UserDetailsService { @Override - UserDetails loadUserByUsername(String login) throws UsernameNotFoundException, DataAccessException; - - User findUser(String login); + CineastsUserDetails loadUserByUsername(String login) throws UsernameNotFoundException, DataAccessException; User getUserFromSession(); @@ -28,5 +26,5 @@ public interface CineastsUserDetailsService extends UserDetailsService { User register(String login, String name, String password); @Transactional - void addFriend(String login); + void addFriend(String login, final User userFromSession); } diff --git a/spring-data-neo4j-examples/cineasts/src/main/java/org/neo4j/cineasts/repository/UserRepository.java b/spring-data-neo4j-examples/cineasts/src/main/java/org/neo4j/cineasts/repository/UserRepository.java index 16ea3b9db..fb8aef025 100644 --- a/spring-data-neo4j-examples/cineasts/src/main/java/org/neo4j/cineasts/repository/UserRepository.java +++ b/spring-data-neo4j-examples/cineasts/src/main/java/org/neo4j/cineasts/repository/UserRepository.java @@ -8,5 +8,6 @@ import org.springframework.data.neo4j.repository.RelationshipOperationsRepositor * @author mh * @since 02.04.11 */ -public interface UserRepository extends GraphRepository, RelationshipOperationsRepository { +public interface UserRepository extends GraphRepository, RelationshipOperationsRepository, CineastsUserDetailsService { + User findByLogin(String login); } diff --git a/spring-data-neo4j-examples/cineasts/src/main/java/org/neo4j/cineasts/service/CineastsUserDetailsServiceImpl.java b/spring-data-neo4j-examples/cineasts/src/main/java/org/neo4j/cineasts/repository/UserRepositoryImpl.java similarity index 74% rename from spring-data-neo4j-examples/cineasts/src/main/java/org/neo4j/cineasts/service/CineastsUserDetailsServiceImpl.java rename to spring-data-neo4j-examples/cineasts/src/main/java/org/neo4j/cineasts/repository/UserRepositoryImpl.java index 081994d6e..1b1c1e199 100644 --- a/spring-data-neo4j-examples/cineasts/src/main/java/org/neo4j/cineasts/service/CineastsUserDetailsServiceImpl.java +++ b/spring-data-neo4j-examples/cineasts/src/main/java/org/neo4j/cineasts/repository/UserRepositoryImpl.java @@ -1,9 +1,9 @@ -package org.neo4j.cineasts.service; +package org.neo4j.cineasts.repository; import org.neo4j.cineasts.domain.Movie; import org.neo4j.cineasts.domain.Rating; import org.neo4j.cineasts.domain.User; -import org.neo4j.cineasts.repository.UserRepository; +import org.neo4j.cineasts.service.CineastsUserDetails; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.dao.DataAccessException; import org.springframework.data.neo4j.template.Neo4jOperations; @@ -11,36 +11,29 @@ import org.springframework.security.authentication.UsernamePasswordAuthenticatio import org.springframework.security.core.Authentication; import org.springframework.security.core.context.SecurityContext; import org.springframework.security.core.context.SecurityContextHolder; -import org.springframework.security.core.userdetails.UserDetails; import org.springframework.security.core.userdetails.UsernameNotFoundException; -import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; /** * @author mh * @since 06.03.11 */ -@Service -public class CineastsUserDetailsServiceImpl implements CineastsUserDetailsService { +public class UserRepositoryImpl implements CineastsUserDetailsService { - @Autowired - private UserRepository userRepository; @Autowired private Neo4jOperations template; @Override - public UserDetails loadUserByUsername(String login) throws UsernameNotFoundException, DataAccessException { - final User user = findUser(login); - if (user==null) throw new UsernameNotFoundException("Username not found",login); + public CineastsUserDetails loadUserByUsername(String login) throws UsernameNotFoundException, DataAccessException { + final User user = findByLogin(login); + if (user==null) throw new UsernameNotFoundException("Username not found: "+login); return new CineastsUserDetails(user); } - @Override - public User findUser(String login) { - return userRepository.findByPropertyValue("login",login); + private User findByLogin(String login) { + return template.lookup(User.class,"login",login).to(User.class).single(); } - @Override public User getUserFromSession() { SecurityContext context = SecurityContextHolder.getContext(); @@ -63,11 +56,11 @@ public class CineastsUserDetailsServiceImpl implements CineastsUserDetailsServic @Override @Transactional public User register(String login, String name, String password) { - User found = findUser(login); + User found = findByLogin(login); if (found!=null) throw new RuntimeException("Login already taken: "+login); if (name==null || name.isEmpty()) throw new RuntimeException("No name provided."); if (password==null || password.isEmpty()) throw new RuntimeException("No password provided."); - User user=userRepository.save(new User(login,name,password,User.Roles.ROLE_USER)); + User user=template.save(new User(login,name,password,User.Roles.ROLE_USER)); setUserInSession(user); return user; } @@ -82,9 +75,8 @@ public class CineastsUserDetailsServiceImpl implements CineastsUserDetailsServic @Override @Transactional - public void addFriend(String login) { - User friend = findUser(login); - User user = getUserFromSession(); + public void addFriend(String friendLogin, final User user) { + User friend = findByLogin(friendLogin); if (!user.equals(friend)) { user.addFriend(friend); template.save(user); diff --git a/spring-data-neo4j-examples/cineasts/src/main/java/org/neo4j/cineasts/service/CineastsRepository.java b/spring-data-neo4j-examples/cineasts/src/main/java/org/neo4j/cineasts/service/CineastsRepository.java deleted file mode 100644 index da2933071..000000000 --- a/spring-data-neo4j-examples/cineasts/src/main/java/org/neo4j/cineasts/service/CineastsRepository.java +++ /dev/null @@ -1,19 +0,0 @@ -package org.neo4j.cineasts.service; - -import org.neo4j.cineasts.repository.MovieRepository; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.stereotype.Repository; -import org.springframework.transaction.annotation.Transactional; - -/** - * @author mh - * @since 04.03.11 - */ -@Repository -@Transactional -public class CineastsRepository { - - @Autowired private MovieRepository movieRepository; - - -} diff --git a/spring-data-neo4j-examples/cineasts/src/main/webapp/WEB-INF/applicatioContext-security.xml b/spring-data-neo4j-examples/cineasts/src/main/webapp/WEB-INF/applicatioContext-security.xml index eebadb1b1..53614c7f3 100644 --- a/spring-data-neo4j-examples/cineasts/src/main/webapp/WEB-INF/applicatioContext-security.xml +++ b/spring-data-neo4j-examples/cineasts/src/main/webapp/WEB-INF/applicatioContext-security.xml @@ -25,7 +25,7 @@ - + diff --git a/spring-data-neo4j-examples/cineasts/src/main/webapp/WEB-INF/applicationContext.xml b/spring-data-neo4j-examples/cineasts/src/main/webapp/WEB-INF/applicationContext.xml index 1072405b8..61f2ec520 100644 --- a/spring-data-neo4j-examples/cineasts/src/main/webapp/WEB-INF/applicationContext.xml +++ b/spring-data-neo4j-examples/cineasts/src/main/webapp/WEB-INF/applicationContext.xml @@ -30,7 +30,6 @@ - + - \ No newline at end of file diff --git a/spring-data-neo4j-examples/cineasts/src/test/java/org/neo4j/cineasts/domain/DomainTest.java b/spring-data-neo4j-examples/cineasts/src/test/java/org/neo4j/cineasts/domain/DomainTest.java index 1f163e5de..9a8f68b4b 100644 --- a/spring-data-neo4j-examples/cineasts/src/test/java/org/neo4j/cineasts/domain/DomainTest.java +++ b/spring-data-neo4j-examples/cineasts/src/test/java/org/neo4j/cineasts/domain/DomainTest.java @@ -15,7 +15,6 @@ import org.springframework.transaction.annotation.Transactional; import java.util.Iterator; import static org.junit.Assert.*; -import static org.junit.Assert.assertNotNull; /** * @author mh diff --git a/spring-data-neo4j-examples/cineasts/src/test/java/org/neo4j/cineasts/service/TransactionTest.java b/spring-data-neo4j-examples/cineasts/src/test/java/org/neo4j/cineasts/service/TransactionTest.java index 588b87307..f59859251 100644 --- a/spring-data-neo4j-examples/cineasts/src/test/java/org/neo4j/cineasts/service/TransactionTest.java +++ b/spring-data-neo4j-examples/cineasts/src/test/java/org/neo4j/cineasts/service/TransactionTest.java @@ -8,6 +8,7 @@ import org.neo4j.cineasts.domain.User; import org.neo4j.cineasts.repository.MovieRepository; import org.neo4j.cineasts.repository.UserRepository; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.test.annotation.DirtiesContext; import org.springframework.test.context.ContextConfiguration; import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; @@ -19,21 +20,20 @@ import static org.junit.Assert.assertEquals; */ @RunWith(SpringJUnit4ClassRunner.class) @ContextConfiguration({"/movies-test-context.xml"}) +@DirtiesContext public class TransactionTest { @Autowired UserRepository userRepository; @Autowired MovieRepository movieRepository; - @Autowired - CineastsUserDetailsService userDetailsService; @Test @Ignore public void testBefriendUsers() { final User me = userRepository.save(new User("me", "me", "me")); final User you = userRepository.save(new User("you", "you", "you")); - userDetailsService.addFriend("you"); + userRepository.addFriend("you", userRepository.getUserFromSession()); final User loaded = userRepository.findOne(me.getId()); assertEquals(1,loaded.getFriends().size()); } @@ -42,7 +42,7 @@ public class TransactionTest { public void testRateMovie() { final User me = userRepository.save(new User("me", "me", "me")); final Movie movie = movieRepository.save(new Movie("1","Movie")); - userDetailsService.rate(movie, me, 5, "cool"); + userRepository.rate(movie, me, 5, "cool"); final User loaded = userRepository.findOne(me.getId()); assertEquals(1,loaded.getRatings().size()); } diff --git a/spring-data-neo4j-examples/cineasts/src/test/resources/movies-test-context.xml b/spring-data-neo4j-examples/cineasts/src/test/resources/movies-test-context.xml index ce2821043..5dfa5fefe 100644 --- a/spring-data-neo4j-examples/cineasts/src/test/resources/movies-test-context.xml +++ b/spring-data-neo4j-examples/cineasts/src/test/resources/movies-test-context.xml @@ -15,7 +15,7 @@ - +