2014-07-11 2 views
1

스프링 보안 + JPA + 커스텀 UserDetailsService를 사용하고 있습니다. 내가 저장할 수있는 것 같습니다.스프링 보안은 커스텀 UserDetailsService를 사용하여 커스텀 사용자 객체를 저장합니다.

String username, String password, boolean enabled, boolean accountNonExpired, 
      boolean credentialsNonExpired, boolean accountNonLocked, Collection<? extends GrantedAuthority> authorities 

사용자 개체에 있습니다. 로그인 후 사용자 정의 사용자 객체를 세션에서 아프게해야한다면 어떻게해야합니까? 나는 처음부터 끝까지, 회사와 ... 저장하려고합니다. 고마워!

답변

3

당신은 당신의 자신의 사용자 모델을 정의하고, 예를

public class UserModel { 
    private username; 
    private password; 
    private firstname; 
    private lastname; 
    . 
    . 
    . 
    etc 
} 

public class MyUserDetails implements UserDetails { 

    private UserModel user; 

    public UserModel getUser(){ 
    return user; 
    } 

    @Override 
    public String getUsername(){ 
    return user.getUsername(); 
    } 

    @Override 
    public String getPassword(){ 
    return user.getPassword(); 
    } 

} 

를 들어, UserDetails 구현에 랩 두분이 모든 원하는 속성을 추가 할 수 있습니다 당신은 당신의 UserModel 특정 속성에 액세스하려면 사용을 필요할 때마다 getUser() 방법 및 액세스 특정 필드는 직접

MyUserDetails myUserDetails = (MyUserDetails) SecurityContextHolder.getContext().getAuthentication().getPrincipal(); 

UserModel user = myUserDetails.getUser(); 

String firstname = user.getFirstname(); 

이러한 구현의 좋은 점은 보안을 UserDetails 구현에서 분리한다는 것입니다 자신의 User 구현은 예를 들어 Hibernate와 같은 ORM 프레임 워크에 의해 관리되는 엔티티 일 수 있습니다

+0

이 사용자는 무엇인지 물어 볼 수 있습니다 자세히 알아보십시오. 언제 userDetailsService와 userDetails를 사용하고 싶습니까? 어떤 유스 케이스인가? 어떤 시나리오에서? 내 REST 응용 프로그램에 대해 완벽하게 작동하는 기본 인증을 구현했으며/how/why에서 믹스에 userDetails를 추가해야하는 이유가 궁금합니다. – Stephane

+0

제 질문에 대한 답변을 얻었습니다. UserDetailsService를 확장 한 사용자 정의 UserDetailsServiceImpl을 구현하여 사용자 정의 UserDetailsWrapper를 확장하여 UserDetails를 확장하고 http.userDetailsService (userDetailsService)와 함께 보안 구성에서 사용합니다. 이렇게하면 액세스 권한을 부여하기 전에 내 사용자 상태를 고려할 수 있습니다. 예를 들어. 사용자가 역할이 부족하면 권한이 거부됩니다. – Stephane

관련 문제