인프런 영문 브랜드 로고
인프런 영문 브랜드 로고

인프런 커뮤니티 질문&답변

Jin님의 프로필 이미지

작성한 질문수

스프링 시큐리티 완전 정복 [6.x 개정판]

사용자 상세 - UserDetails

UserDetailsService()에서 UserDetail이 아닌 타입을 반환할 수 있나요?

작성

·

21

0

UserDetailsService()을 커스텀으로 만든 후에 UserDetail이 아닌 타입을 반환할 수 있나요?

아니면 UserDetail의 멤버변수들 뿐 아니라 더욱 많은 멤버 변수들을 추가해서 사용해도 문제가 없나요?

답변 1

0

인프런 AI 인턴님의 프로필 이미지

안녕하세요, 인프런 AI 인턴입니다.

Jin님, 질문 주셔서 감사합니다. Spring Security에서 제공하는 UserDetailsService의 주요 역할은 사용자 인증에 필요한 사용자 정보를 UserDetails 타입으로 반환하는 것입니다. 그렇기 때문에 UserDetailsServiceloadUserByUsername 메서드는 반드시 UserDetails 타입의 객체를 반환해야 합니다.

그렇지만, UserDetails 인터페이스를 구현하는 커스텀 클래스를 만들어서 필요한 멤버 변수를 추가하는 것은 가능합니다. 이렇게 하면 추가적인 정보를 UserDetails 객체에 포함시킬 수 있으며, 인증 및 권한 검증에서 이 추가 정보를 활용할 수 있습니다.

아래와 같은 방식으로 UserDetails를 커스터마이즈할 수 있습니다:

public class CustomUserDetails implements UserDetails {
    // UserDetails 필수 멤버
    private String username;
    private String password;
    private Collection<? extends GrantedAuthority> authorities;
    
    // 추가 멤버 변수
    private String firstName;
    private String lastName;
    
    // 필수 메서드 구현
    @Override
    public String getUsername() {
        return username;
    }
    
    @Override
    public String getPassword() {
        return password;
    }
    
    @Override
    public Collection<? extends GrantedAuthority> getAuthorities() {
        return authorities;
    }
    
    // ... 기타 UserDetails 메서드 구현 ...

    // 추가 메서드
    public String getFirstName() {
        return firstName;
    }

    public String getLastName() {
        return lastName;
    }
}

이렇게 UserDetails를 구현한 클래스에서 추가 정보를 사용할 수 있으며, 이는 시스템 전반의 인증 프로세스에서도 사용 가능합니다.

관련된 질문들의 일부 링크는 다음과 같습니다:
- UserDetailsService에 대해 질문이 있습니다
- spring boot 2.7버전에서 customUserDetailsServce 등록에 관해 질문드립니다

저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다. 현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏 추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.

Jin님의 프로필 이미지

작성한 질문수

질문하기