diff options
| author | Kamal Wickramanayake <kamal@inbox.lk> | 2026-06-20 22:02:32 +0530 |
|---|---|---|
| committer | Kamal Wickramanayake <kamal@inbox.lk> | 2026-06-20 22:02:32 +0530 |
| commit | 69b18c1fe1d7d876c86de850b716de396877ad9d (patch) | |
| tree | 832330933dccb4848ba0ff89a9f4f5953b3da3e7 /spring-boot/10-role-based-security/src/main/java/com/example/spring/security/service | |
| parent | 59c2d3502259b338c36991ced8dc25d8dc9713b1 (diff) | |
A list of users are shown. Added error pages.
Diffstat (limited to 'spring-boot/10-role-based-security/src/main/java/com/example/spring/security/service')
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. + } +} |
