diff --git a/src/main/java/org/springframework/samples/petclinic/security/UserDetailsServiceImpl.java b/src/main/java/org/springframework/samples/petclinic/security/UserDetailsServiceImpl.java new file mode 100644 index 0000000000000000000000000000000000000000..9997e1481435bcc09c6c9acb3c5075a44822a04a --- /dev/null +++ b/src/main/java/org/springframework/samples/petclinic/security/UserDetailsServiceImpl.java @@ -0,0 +1,27 @@ +package org.springframework.samples.petclinic.security; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.samples.petclinic.model.security.User; +import org.springframework.security.core.userdetails.UserDetails; +import org.springframework.security.core.userdetails.UserDetailsService; +import org.springframework.security.core.userdetails.UsernameNotFoundException; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +@Service +public class UserDetailsServiceImpl implements UserDetailsService { + + @Autowired + private UserRepository userRepository; + + @Override + @Transactional(readOnly = true) + public UserDetails loadUserByUsername(String username) throws UsernameNotFoundException { + User user = userRepository.findByUsername(username); + if (user != null) { + return user; + } + throw new UsernameNotFoundException(username); + } + +} diff --git a/src/main/java/org/springframework/samples/petclinic/security/UserRepository.java b/src/main/java/org/springframework/samples/petclinic/security/UserRepository.java new file mode 100644 index 0000000000000000000000000000000000000000..a1e9658f17d4812f5c82dfcac0abe2046847da97 --- /dev/null +++ b/src/main/java/org/springframework/samples/petclinic/security/UserRepository.java @@ -0,0 +1,15 @@ +package org.springframework.samples.petclinic.security; + +import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.data.jpa.repository.Query; +import org.springframework.data.repository.query.Param; +import org.springframework.samples.petclinic.model.security.User; +import org.springframework.stereotype.Repository; + +@Repository +public interface UserRepository extends JpaRepository<User, Long> { + @Query("SELECT DISTINCT user FROM User user " + + "INNER JOIN FETCH user.authorities AS authorities " + + "WHERE user.username = :username") + User findByUsername(@Param("username") String username); +} \ No newline at end of file