summaryrefslogtreecommitdiff
path: root/spring-boot/10-role-based-security/src/main/java/com/example/spring/security/service
diff options
context:
space:
mode:
Diffstat (limited to 'spring-boot/10-role-based-security/src/main/java/com/example/spring/security/service')
-rw-r--r--spring-boot/10-role-based-security/src/main/java/com/example/spring/security/service/CustomUserDetailsService.java1
-rw-r--r--spring-boot/10-role-based-security/src/main/java/com/example/spring/security/service/UserService.java12
-rw-r--r--spring-boot/10-role-based-security/src/main/java/com/example/spring/security/service/UserServiceImpl.java49
3 files changed, 61 insertions, 1 deletions
diff --git a/spring-boot/10-role-based-security/src/main/java/com/example/spring/security/service/CustomUserDetailsService.java b/spring-boot/10-role-based-security/src/main/java/com/example/spring/security/service/CustomUserDetailsService.java
index cdced4a..1795109 100644
--- a/spring-boot/10-role-based-security/src/main/java/com/example/spring/security/service/CustomUserDetailsService.java
+++ b/spring-boot/10-role-based-security/src/main/java/com/example/spring/security/service/CustomUserDetailsService.java
@@ -21,5 +21,4 @@ public class CustomUserDetailsService implements UserDetailsService {
return userRepository.findByUsername(username)
.orElseThrow(() -> new UsernameNotFoundException("User not found"));
}
-
} \ No newline at end of file
diff --git a/spring-boot/10-role-based-security/src/main/java/com/example/spring/security/service/UserService.java b/spring-boot/10-role-based-security/src/main/java/com/example/spring/security/service/UserService.java
new file mode 100644
index 0000000..a4e18be
--- /dev/null
+++ b/spring-boot/10-role-based-security/src/main/java/com/example/spring/security/service/UserService.java
@@ -0,0 +1,12 @@
+package com.example.spring.security.service;
+
+import java.util.List;
+import java.util.Optional;
+
+import com.example.spring.security.entity.User;
+
+public interface UserService {
+ public Optional<User> findById(Long id);
+ public List<User> findAll();
+ public void updateUser(Long userId, String description);
+}
diff --git a/spring-boot/10-role-based-security/src/main/java/com/example/spring/security/service/UserServiceImpl.java b/spring-boot/10-role-based-security/src/main/java/com/example/spring/security/service/UserServiceImpl.java
new file mode 100644
index 0000000..0d44d21
--- /dev/null
+++ b/spring-boot/10-role-based-security/src/main/java/com/example/spring/security/service/UserServiceImpl.java
@@ -0,0 +1,49 @@
+package com.example.spring.security.service;
+
+import java.util.List;
+import java.util.Optional;
+
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.data.domain.Sort;
+import org.springframework.security.access.prepost.PreAuthorize;
+import org.springframework.stereotype.Service;
+
+import com.example.spring.security.entity.User;
+import com.example.spring.security.repository.UserRepository;
+
+import jakarta.transaction.Transactional;
+
+@Service
+public class UserServiceImpl implements UserService {
+
+ @Autowired
+ private UserRepository userRepository;
+
+ @Override
+ public Optional<User> findById(Long id) {
+ return userRepository.findById(id);
+ }
+
+ @Override
+ public List<User> findAll() {
+ return userRepository.findAll(Sort.by(Sort.Direction.ASC, "username"));
+ }
+
+ @PreAuthorize("hasRole('ADMIN')")
+ @Transactional
+ @Override
+ public void updateUser(Long id, String description) {
+ // Do whatever the work needed.
+ // ...
+
+ Optional<User> userOpt = userRepository.findById(id);
+
+ User user = userOpt.get();
+
+ user.setDescription(description);
+
+ // NO userRepository.save(user) IS ACTUALLY REQUIRED HERE since the method
+ // has been annotated with @Transactional!
+ // Transaction commits -> Hibernate issues the SQL UPDATE.
+ }
+}