Notice
Recent Posts
Link
Tags
- DI
- sql
- mysql
- select
- nginx
- spring mvc
- PYTHON
- ORM
- spring boot
- string
- 1차원 배열
- Git
- 프로그래머스
- springboot
- 자바
- jpa
- AWS
- 데이터베이스
- spring
- spring security 6
- Docker
- session
- join
- @transactional
- Django
- java
- 스프링부트
- SSL
- 스프링
- 문자열
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
Archives
개발하는 자몽
[Spring Security] UserDetails, UserDetailsService 본문
UserDetailsService
UserSecurityService는 스프링 시큐리티 설정에 등록할 클래스이다. 이 클래스는 스프링 시큐리티 로그인 처리의 핵심 부분이다.
@RequiredArgsConstructor
@Service
public class UserSecurityService implements UserDetailsService {
private final UserRepository userRepository;
@Override
public UserDetails loadUserByUsername(String username) throws UsernameNotFoundException {
Optional<SiteUser> userOptional = userRepository.findByUsername(username);
SiteUser user = userOptional.orElseThrow(() -> {
throw new UsernameNotFoundException("사용자를 찾을 수 없습니다.");
});
List<GrantedAuthority> authorities = new ArrayList<>();
if ("admin".equals(username)) { //ADMIN 권한 부여
authorities.add(new SimpleGrantedAuthority(UserRole.ADMIN.getValue()));
} else { //USER 권한 부여
authorities.add(new SimpleGrantedAuthority(UserRole.USER.getValue()));
}
return new User(user.getUsername(), user.getPassword(), authorities);
}
}
UserSecurityService는 스프링 시큐리티가 제공하는 UserDetailsService 인터페이스를 구현(implements) 해야 한다. UserDetailsService는 loadUserByUsername 메서드를 구현하도록 강제한다. 해당 메서드는 사용자명으로 비밀번호를 조회하여 찾은 사용자 객체를 리턴한다.
정확히는 UserDetailsService는 사용자의 정보를 가져오는 인터페이스이며, 사용자의 정보를 불러와서 UserDetails(반환 타입)로 반환한다.
UserDetails
위해서 UserDetailsService 인터페이스를 구현할 때 loadUserByUsername 메서드를 구현하도록 강제했다. 이때 반환 타입은 UserDetails였다.
UserDetails는 사용자의 정보를 담는 인터페이스이다. 스프링 시큐리티에서 사용자의 정보를 불러오기 위해서 구현해야 하는 인터페이스로 기본 오버라이드 메서드는 아래와 같다.
메소드 | 리턴 타입 | 설명 | 기본값 |
getAuthorities() | Collection<? extends GrantedAuthorities> |
계정의 권한 목록을 반환 | |
getPassword() | String | 계정의 비밀번호를 반환 | |
getUsername() | String | 계정의 고유한 값을 반환 (Ex. DB PK값, 중복이 없는 이메일 값) |
|
isAccountNonExpired() | boolean | 계정의 만료 여부 반환 | true(만료 안됨) |
isAccountNonLocked() | boolean | 계정의 잠김 여부 반환 | true(잠기지 않음) |
isCredentialsNonExpired() | boolean | 비밀번호 만료 여부 반환 | true(만료 안됨 |
isEnabled() | boolean | 계정의 활성화 여부 반환 | true(활성화 됨) |
참고
'Java > Spring' 카테고리의 다른 글
[Spring Security] @PreAuthorize (0) | 2023.01.05 |
---|---|
[Spring Security] GrantedAuthority, SimpleGrantedAuthority (0) | 2023.01.04 |
[Spring Security] BCryptPasswordEncoder (0) | 2023.01.02 |
[Spring Security] @EnableWebSecurity (0) | 2022.12.30 |
[JPA] Entity - 매핑 관계 (0) | 2022.12.22 |
Comments