diff options
Diffstat (limited to 'spring-boot/09-spring-security-db-authentication/src/main/java/com/example/spring/user')
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 |
