package net.dontdrinkandroot.example.angularrestspringsecurity.service; import net.dontdrinkandroot.example.angularrestspringsecurity.dao.accesstoken.AccessTokenDao; import net.dontdrinkandroot.example.angularrestspringsecurity.dao.user.UserDao; import net.dontdrinkandroot.example.angularrestspringsecurity.entity.AccessToken; import net.dontdrinkandroot.example.angularrestspringsecurity.entity.User; import org.springframework.security.core.userdetails.UserDetails; import org.springframework.security.core.userdetails.UsernameNotFoundException; import org.springframework.transaction.annotation.Transactional; import java.util.UUID; /** * @author Philip Washington Sorst <philip@sorst.net> */ public class DaoUserService implements UserService { private UserDao userDao; private AccessTokenDao accessTokenDao; protected DaoUserService() { /* Reflection instantiation */ } public DaoUserService(UserDao userDao, AccessTokenDao accessTokenDao) { this.userDao = userDao; this.accessTokenDao = accessTokenDao; } @Override @Transactional(readOnly = true) public UserDetails loadUserByUsername(String username) throws UsernameNotFoundException { return this.userDao.loadUserByUsername(username); } @Override @Transactional public User findUserByAccessToken(String accessTokenString) { AccessToken accessToken = this.accessTokenDao.findByToken(accessTokenString); if (null == accessToken) { return null; } if (accessToken.isExpired()) { this.accessTokenDao.delete(accessToken); return null; } return accessToken.getUser(); } @Override @Transactional public AccessToken createAccessToken(User user) { AccessToken accessToken = new AccessToken(user, UUID.randomUUID().toString()); return this.accessTokenDao.save(accessToken); } }