μΈμ¦ μμ μ User μν°ν° μ 체λ₯Ό CustomUserDetailsμ λ΄κ³
μ΄ν 컨νΈλ‘€λ¬λ μλΉμ€μμ user.getRoles()μ²λΌ μ°κ΄ νλμ μ κ·Όν κ²½μ° λ€μ μ€λ₯ λ°μ:
LazyInitializationException: could not initialize proxy β no Session
User κ°μ²΄μ μ°κ΄ νλμ μ κ·Όνκ² λ¨Authentication κ°μ²΄λ μΈμ
κΈ°λ°μΌλ‘ μ μ§λ¨User μν°ν° μ 체λ₯Ό λ€κ³ μλ€λ©΄, μΈμ
λ§λ£ μ΄ν ν΄λΉ κ°μ²΄λ 무ν¨νλ¨user.getUserRoles() λ± νΈμΆ μ LAZY μ΄κΈ°ν μ€ν¨ + μΈμ
/μΊμ μ€λ₯ λμ λ°μ κ°λ₯email, id λ±)public class CustomUserDetails implements UserDetails {
private final String email;
private final String nickname;
public CustomUserDetails(String email, String nickname) {
this.email = email;
this.nickname = nickname;
}
public String getEmail() {
return email;
}
@Override
public Collection<? extends GrantedAuthority> getAuthorities() {
return List.of(); // λ³λ μ€μ κ°λ₯
}
// μλ΅: getPassword(), isEnabled() λ±
}
@Override
public UserDetails loadUserByUsername(String email) {
User user = userRepository.findByEmail(email)
.orElseThrow(() -> new UsernameNotFoundException("μ μ μμ"));
return new CustomUserDetails(user.getEmail(), user.getNickname());
}
@Transactional(readOnly = true)
public User getCurrentUser() {
Authentication auth = SecurityContextHolder.getContext().getAuthentication();
String email = ((CustomUserDetails) auth.getPrincipal()).getEmail();
return userRepository.findWithRolesByEmail(email)
.orElseThrow(() -> new IllegalStateException("μ μ μ 보 μμ"));
}
| μλͺ»λ λ°©μ | μ¬λ°λ₯Έ λ°©μ |
|---|---|
μΈμ¦ κ°μ²΄μ User μν°ν° μ 체 λ³΄κ΄ | μΈμ¦ κ°μ²΄μλ μ΅μ μ λ³΄λ§ λ³΄κ΄ |
| μ΄ν μλΉμ€ κ³μΈ΅μμ LAZY μ€λ₯ λ°μ | νμν μμ μ DBμμ λ€μ fetch |
| μΈμ λ§λ£ μ νλ‘μ/μΈμ μμΈ λ°μ | μΈμ¦ κ°μ²΄λ μμ νκ² μ μ§ κ°λ₯ |