summaryrefslogtreecommitdiff
path: root/spring-boot/09-spring-security-db-authentication/src/main/java/com/example/spring/user
diff options
context:
space:
mode:
authorKamal Wickramanayake <kamal@inbox.lk>2026-06-13 21:03:31 +0530
committerKamal Wickramanayake <kamal@inbox.lk>2026-06-13 21:03:31 +0530
commitf0001c5c8d8a33729b93d8d6e10d3af40bfabed6 (patch)
tree6042e5bfdd48671daa95baf29c5041e526f5b62e /spring-boot/09-spring-security-db-authentication/src/main/java/com/example/spring/user
parent6ae21cd4e51756ea14b43b82a9d500bca9fb8032 (diff)
Added sample application 09-spring-security-db-authentication
Diffstat (limited to 'spring-boot/09-spring-security-db-authentication/src/main/java/com/example/spring/user')
-rw-r--r--spring-boot/09-spring-security-db-authentication/src/main/java/com/example/spring/user/entity/User.java53
-rw-r--r--spring-boot/09-spring-security-db-authentication/src/main/java/com/example/spring/user/repository/UserRepository.java13
-rw-r--r--spring-boot/09-spring-security-db-authentication/src/main/java/com/example/spring/user/service/CustomUserDetailsService.java25
3 files changed, 91 insertions, 0 deletions
diff --git a/spring-boot/09-spring-security-db-authentication/src/main/java/com/example/spring/user/entity/User.java b/spring-boot/09-spring-security-db-authentication/src/main/java/com/example/spring/user/entity/User.java
new file mode 100644
index 0000000..a8ec6d2
--- /dev/null
+++ b/spring-boot/09-spring-security-db-authentication/src/main/java/com/example/spring/user/entity/User.java
@@ -0,0 +1,53 @@
+package com.example.spring.user.entity;
+
+import java.util.ArrayList;
+import java.util.Collection;
+
+import org.springframework.security.core.GrantedAuthority;
+import org.springframework.security.core.userdetails.UserDetails;
+
+import jakarta.persistence.Column;
+import jakarta.persistence.Entity;
+import jakarta.persistence.GeneratedValue;
+import jakarta.persistence.GenerationType;
+import jakarta.persistence.Id;
+import jakarta.persistence.Table;
+
+/*
+ @Table - Used to set the database table name explicitely.
+*/
+@Entity
+@Table(name="user_account")
+public class User implements UserDetails {
+
+ /*
+ GenerationType.IDENTITY - Auto generate value based on database's native auto increment feature
+ */
+ @Id
+ @GeneratedValue(strategy = GenerationType.IDENTITY)
+ private Long id;
+
+ @Column(unique = true)
+ private String username;
+
+ private String password;
+
+ /*
+ Roles and permissions can be represented by GrantedAuthority instances.
+ */
+ @Override
+ public Collection<? extends GrantedAuthority> getAuthorities() {
+ return new ArrayList<>();
+ }
+
+ @Override
+ public String getPassword() {
+ return password;
+ }
+
+ @Override
+ public String getUsername() {
+ return username;
+ }
+
+}
diff --git a/spring-boot/09-spring-security-db-authentication/src/main/java/com/example/spring/user/repository/UserRepository.java b/spring-boot/09-spring-security-db-authentication/src/main/java/com/example/spring/user/repository/UserRepository.java
new file mode 100644
index 0000000..f719637
--- /dev/null
+++ b/spring-boot/09-spring-security-db-authentication/src/main/java/com/example/spring/user/repository/UserRepository.java
@@ -0,0 +1,13 @@
+package com.example.spring.user.repository;
+
+import java.util.Optional;
+
+import org.springframework.data.repository.ListCrudRepository;
+import org.springframework.stereotype.Repository;
+
+import com.example.spring.user.entity.User;
+
+@Repository
+public interface UserRepository extends ListCrudRepository<User, Long> {
+ Optional<User> findByUsername(String username);
+}
diff --git a/spring-boot/09-spring-security-db-authentication/src/main/java/com/example/spring/user/service/CustomUserDetailsService.java b/spring-boot/09-spring-security-db-authentication/src/main/java/com/example/spring/user/service/CustomUserDetailsService.java
new file mode 100644
index 0000000..c61649e
--- /dev/null
+++ b/spring-boot/09-spring-security-db-authentication/src/main/java/com/example/spring/user/service/CustomUserDetailsService.java
@@ -0,0 +1,25 @@
+package com.example.spring.user.service;
+
+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 com.example.spring.user.repository.UserRepository;
+
+@Service
+public class CustomUserDetailsService implements UserDetailsService {
+
+ private final UserRepository userRepository;
+
+ public CustomUserDetailsService(UserRepository userRepository) {
+ this.userRepository = userRepository;
+ }
+
+ @Override
+ public UserDetails loadUserByUsername(String username) throws UsernameNotFoundException {
+ return userRepository.findByUsername(username)
+ .orElseThrow(() -> new UsernameNotFoundException("User not found"));
+ }
+
+} \ No newline at end of file