From 2bea155e63200c5bf40923faa110bf4e4eecafe4 Mon Sep 17 00:00:00 2001
From: Vitaliy Fedoriv <vitaliy.fedoriv@gmail.com>
Date: Wed, 23 May 2018 11:10:32 +0300
Subject: [PATCH] add UsedDetails impl

---
 .../security/UserDetailsServiceImpl.java      | 27 +++++++++++++++++++
 .../petclinic/security/UserRepository.java    | 15 +++++++++++
 2 files changed, 42 insertions(+)
 create mode 100644 src/main/java/org/springframework/samples/petclinic/security/UserDetailsServiceImpl.java
 create mode 100644 src/main/java/org/springframework/samples/petclinic/security/UserRepository.java

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 00000000..9997e148
--- /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 00000000..a1e9658f
--- /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
-- 
GitLab