2016-05-12 96 views
0

我希望讓我自己的'用戶'實體登錄到應用程序中。創建我自己的用戶實體

我想知道的是,如果有可能,如果可能的話,我應該在哪裏採取預防措施,應該考慮哪些要點以及哪些文件需要修改?

回答

1

您需要通過實現UserDetailsS​​ervice來創建一個用戶類,如

@Transactional 
@Override 
public UserDetails loadUserByUsername(String username) 
    throws UsernameNotFoundException { 

    MyUser details = userDao.getUser(username); 
    Collection<simplegrantedauthority> authorities = new ArrayList<simplegrantedauthority>(); 
    SimpleGrantedAuthority userAuthority = new SimpleGrantedAuthority(
    "ROLE_USER"); 
    SimpleGrantedAuthority adminAuthority = new SimpleGrantedAuthority(
    "ROLE_ADMIN"); 
    if (details.getRole().equals("user")) 
    authorities.add(userAuthority); 
    else if (details.getRole().equals("admin")) { 
    authorities.add(userAuthority); 
    authorities.add(adminAuthority); 
    } 
    UserDetails user = new User(details.getUsername(), 
    details.getPassword(), true, true, true, true, authorities); 
    return user; 
} 
} 

的再配置Spring使用您的customuser對象......像

<authentication-manager> 
    <authentication-provider user-service-ref="authService"> 
    </authentication-provider> 
</authentication-manager> 

全部例如可以在Spring Custom User with DAO and Entity

找到
1

您可以創建一個擴展UserDetailsS​​ervice的用戶服務,然後創建UserDetail對象。

這與此類似。

創建你的用戶等級:

public class MyUserDetails implements UserDetails { 

    private UserEntity user; 
    private List<GrantedAuthority> authorities; 

    /** 
    * Constructor 
    */ 
    public MyUserDetails(UserEntity user) { 
     this.user = user; 
     this.authorities = Arrays.asList(new SimpleGrantedAuthority(user.getRole().name())); 
    } 

    /* (non-Javadoc) 
    * @see org.springframework.security.core.userdetails.UserDetails#getAuthorities() 
    */ 
    @Override 
    public Collection<? extends GrantedAuthority> getAuthorities() { 
     return authorities; 
    } 

    /* (non-Javadoc) 
    * @see org.springframework.security.core.userdetails.UserDetails#getPassword() 
    */ 
    @Override 
    public String getPassword() { 
     return user.getPassword(); 
    } 

    /* (non-Javadoc) 
    * @see org.springframework.security.core.userdetails.UserDetails#getUsername() 
    */ 
    @Override 
    public String getUsername() { 
     return user.getEmail(); 
    } 

    /* (non-Javadoc) 
    * @see org.springframework.security.core.userdetails.UserDetails#isAccountNonExpired() 
    */ 
    @Override 
    public boolean isAccountNonExpired() { 
     return true; 
    } 

    /* (non-Javadoc) 
    * @see org.springframework.security.core.userdetails.UserDetails#isAccountNonLocked() 
    */ 
    @Override 
    public boolean isAccountNonLocked() { 
     return !user.isLocked(); 
    } 

    /* (non-Javadoc) 
    * @see org.springframework.security.core.userdetails.UserDetails#isCredentialsNonExpired() 
    */ 
    @Override 
    public boolean isCredentialsNonExpired() { 
     return !user.isExpired(); 
    } 

    /* (non-Javadoc) 
    * @see org.springframework.security.core.userdetails.UserDetails#isEnabled() 
    */ 
    @Override 
    public boolean isEnabled() { 
     return user.isEnabled(); 
    } 

    /** 
    * @return the user 
    */ 
    public UserEntity getUser() { 
     return user; 
    } 

    /** 
    * @param user the user to set 
    */ 
    public void setUser(UserEntity user) { 
     this.user = user; 
    } 
} 

那麼你應該創建你的UserDetailsS​​ervice:

@Service 
public class MyUserDetailsService implements UserDetailsService { 

    @Autowired 
    private UserRepository userRepo; 

    /* 
    * (non-Javadoc) 
    * @see org.springframework.security.core.userdetails.UserDetailsService#loadUserByUsername(java.lang.String) 
    */ 
    @Override 
    public UserDetails loadUserByUsername(String username) throws UsernameNotFoundException { 
     UserEntity user = userDao.findByEmail(username); 

     if (user == null) { 
       LOGGER.warn("User {} does not exist in our database", username); 
       throw new UsernameNotFoundException("User not found."); 
     } 

     return new MyUserDetails(user); 
    } 
} 

最後,你應該添加配置春季安全使用你的服務:

@Configuration 
@EnableWebSecurity 
public class SecurityConfig extends WebSecurityConfigurerAdapter { 

    @Autowired 
    private MyUserDetailsService userDetailsService; 

    @Override 
    public void configure(AuthenticationManagerBuilder auth) throws Exception { 
     auth.userDetailsService(userDetailsService).passwordEncoder(new Md5PasswordEncoder()); 
    } 
}