replaced CineastsUserDetailsService with a custom UserRepository-Implementation
This commit is contained in:
@@ -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);
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
@@ -8,5 +8,6 @@ import org.springframework.data.neo4j.repository.RelationshipOperationsRepositor
|
||||
* @author mh
|
||||
* @since 02.04.11
|
||||
*/
|
||||
public interface UserRepository extends GraphRepository<User>, RelationshipOperationsRepository<User> {
|
||||
public interface UserRepository extends GraphRepository<User>, RelationshipOperationsRepository<User>, CineastsUserDetailsService {
|
||||
User findByLogin(String login);
|
||||
}
|
||||
|
||||
@@ -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);
|
||||
@@ -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;
|
||||
|
||||
|
||||
}
|
||||
@@ -25,7 +25,7 @@
|
||||
</security:http>
|
||||
|
||||
<security:authentication-manager>
|
||||
<security:authentication-provider user-service-ref="cineastsUserDetailsServiceImpl">
|
||||
<security:authentication-provider user-service-ref="userRepository">
|
||||
<security:password-encoder hash="md5">
|
||||
<security:salt-source system-wide="cewuiqwzie"/>
|
||||
</security:password-encoder>
|
||||
|
||||
@@ -30,7 +30,6 @@
|
||||
<constructor-arg value="data/json"/>
|
||||
</bean>
|
||||
|
||||
<tx:annotation-driven mode="proxy" transaction-manager="transactionManager"/>
|
||||
<tx:annotation-driven mode="proxy"/>
|
||||
|
||||
<!--import resource="applicatioContext-security.xml"/-->
|
||||
</beans>
|
||||
@@ -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
|
||||
|
||||
@@ -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());
|
||||
}
|
||||
|
||||
@@ -15,7 +15,7 @@
|
||||
<neo4j:config graphDatabaseService="graphDatabaseService"/>
|
||||
<neo4j:repositories base-package="org.neo4j.cineasts.repository"/>
|
||||
|
||||
<bean id="graphDatabaseService" class="org.neo4j.test.ImpermanentGraphDatabase"/>
|
||||
<bean id="graphDatabaseService" class="org.neo4j.test.ImpermanentGraphDatabase" destroy-method="shutdown"/>
|
||||
|
||||
<bean class="org.neo4j.cineasts.movieimport.MovieDbApiClient">
|
||||
<constructor-arg value="926d2a79e82920b62f03b1cb57e532e6"/>
|
||||
|
||||
Reference in New Issue
Block a user