Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- 99클럽
- 인프콘 2024
- KPT회고
- Python
- 빈 조회 2개 이상
- 전략패턴 #StrategyPattern #디자인패턴
- Spring multimodule
- 항해99
- 프로그래머스
- 디자인패턴
- JavaScript
- 프로그래머스 이중우선순위큐
- DesignPattern
- @FeignClient
- jwttoken
- TiL
- 디자인 패턴
- jwt
- 취업리부트코스
- 개발자 취업
- 구글 OAuth login
- spring batch 5.0
- 단기개발자코스
- 빈 충돌
- 파이썬
- 커스텀 헤더
- infcon 2024
- 개발자부트캠프추천
- 코딩테스트 준비
- 1주일회고
Archives
- Today
- Total
m1ndy5's coding blog
Spring Security UserDetails, UserDetailsService 본문
UserDetail
Spring Security에서 사용자의 정보를 담는 인터페이스
@Data
public class PrincipalDetails implements UserDetails{
private static final long serialVersionUID = 1L;
private User user;
public PrincipalDetails(User user) {
this.user = user;
}
// 권한 : 한개가 아닐 수 있어서 Collection 타입으로 return
@Override
public Collection<? extends GrantedAuthority> getAuthorities() {
Collection<GrantedAuthority> collector = new ArrayList<>();
collector.add(() -> {return user.getRole();});
return collector;
}
// 계정 비밀번호
@Override
public String getPassword() {
return user.getPassword();
}
// 계정의 고유한 값 (중복 x)
@Override
public String getUsername() {
return user.getUsername();
}
// 계정 만료 여부
@Override
public boolean isAccountNonExpired() {
return true;
}
// 계정 잠김 여부
@Override
public boolean isAccountNonLocked() {
return true;
}
// 비밀번호 만료 여부
@Override
public boolean isCredentialsNonExpired() {
return true;
}
// 계정 활성화 여부
@Override
public boolean isEnabled() {
return true;
}
}
UserDetailService
Spring Security에서 유저의 정보를 가져오는 인터페이스
@RequiredArgsConstructor
@Service
public class PrincipalDetailsService implements UserDetailsService {
private final UserRepository userRepository;
// 1. 패스워드는 알아서 체킹하니까 신경쓸 필요 없다.
// 2. 리턴이 잘되면 자동으로 UserDetails 타입을 세션으로 만든다.
@Override
public UserDetails loadUserByUsername(String username) throws UsernameNotFoundException{
User userEntity = userRepository.findByUsername(username);
if(userEntity == null) {
return null;
} else {
return new PrincipalDetails(userEntity);
}
}
}
** 후에 Spring Security 동작 원리 정리 필요 **
'백엔드 with java > spring' 카테고리의 다른 글
Entity 대신 DTO를 반환해야하는 이유 (0) | 2024.01.17 |
---|---|
UnsatisfiedDependencyException (feat.영한님 강의) (2) | 2023.12.05 |
Jackson & Constructor (0) | 2023.07.11 |
정적 컨텐츠 VS MVC와 템플릿엔진 VS API (0) | 2023.03.07 |
View로 서버 잘 돌아가는지 확인하기 (0) | 2023.03.07 |