Tworzę aplikację w Spring MVC i mam problem z uzyskaniem dostępu do obiektu użytkownika (ustawienia, dane, kolekcje obiektów itd.). Obecnie realizuję to w ten sposób
@RequestMapping(value = { "/editor" }, method = RequestMethod.GET)
public ModelAndView mainPage(Authentication authentication) {
String name = authentication.getName();
User currentUser = userService.getCurrentUser(name);
ModelAndView model = new ModelAndView("editor");
return model;
}
@Service("userService")
@Scope(value=org.springframework.web.context.WebApplicationContext.SCOPE_SESSION, proxyMode=ScopedProxyMode.TARGET_CLASS)
public class UserService {
@Autowired
private UserDao userDao;
private User user;
@Override
@Transactional
public User getCurrentUser(String email) {
if(user == null) {
user = userDao.getByEmail(email);
}
return user;
}
}
Jednak czuję, że jest to bardzo nieeleganckie rozwiązanie, ze względu na potrzebę ciągłego sprawdzania (user == null) oraz tworzenia każdego kontrolera z parametrem typu Authentication. W jaki sposób mógłbym uzyskiwać dostęp do tego obiektu z poziomu dowolnego kontrolera? Czy istnieją jakieś książki albo artykuły, które opisują tego typu problemy, jak prawidłowo organizować kod aplikacji?