2016-03-29 10 views
0

Java Spring'te bir web uygulaması yazıyorum. Bazı sorun neden bu kod parçası var:IllegalArgumentException: Yetkililer listesi boş olmamalıdır

List<GrantedAuthority> authorities = new ArrayList<GrantedAuthority>(); 
authorities.add(new SimpleGrantedAuthority("ROLE_USER")); 
user.setAuthorities(authorities); 

UserDetails userDetails = new MyUserDetails(user); 
jdbcUserDetailsManager.setDataSource(jdbc.getDataSource()); 
jdbcUserDetailsManager.setJdbcTemplate(jdbc); 
jdbcUserDetailsManager.createUser(userDetails); 

son satır bir istisna neden olur

java.lang.IllegalArgumentException: Yetkililer liste budur

null olmamalı MyUserDetails sınıfı:

public final class MyUserDetails extends MyUser implements UserDetails { 

private static final long serialVersionUID = 1L; 

public MyUserDetails (MyUser user) { 
    super(user); 
    this.setPassword(user.getPassword()); 
    this.setLogin(user.getLogin()); 
    this.setAuthorities(user.getRoles()); 
} 

@Override 
public Collection<? extends GrantedAuthority> getAuthorities() { 
    return getRoles(); 
} 

@Override 
public String getUsername() { 
    return getLogin(); 
} 

@Override 
public boolean isAccountNonExpired() { 
    return true; 
} 

@Override 
public boolean isAccountNonLocked() { 
    return true; 
} 

@Override 
public boolean isCredentialsNonExpired() { 
    return true; 
} 

@Override 
public boolean isEnabled() { 
    return true; 
} 
} 

Bu benim sınıfım Kullanıcı:

public class MyUser { 

    String login; 
    String password; 
    List<GrantedAuthority> roles; 

    public MyUser(MyUser user) { 
     super(); 
     this.login = user.getLogin(); 
     this.password = user.getPassword(); 
    } 

    public String getLogin() { 
     return login; 
    } 

    public String getPassword() { 
     return password; 
    } 

    public void setAuthorities(List<GrantedAuthority> authorities) { 
     this.roles = roles; 
    } 

    public void setPassword(String password) { 
     this.password = password; 
    } 

    public void setLogin(String login) { 
     this.login = login; 
    } 

    public List<GrantedAuthority> getRoles() { 
     return roles; 
    } 

} 

Bu konuyla ilgili herhangi bir fikir ve tavsiye çok takdir edilecektir. MyUser sınıfında

+0

ile değiştirin. –

+0

Soruyu düzenledim. – Someone

+0

Gönderinizde neyin ne olduğunu bulmayı zorlaştıran tutarsızlıklar var: _ "Bu, MyUserDetails sınıfı" _, ancak yapıcı "UserRepositoryUserDetails". Ayrıca, UserDB nedir? Listenin düşündüğünüz şekilde ayarlanmadığı oldukça açık, ancak kodu göremiyoruz. –

cevap

1

En önemli parçasını setAuthorities `beyanı() 'ihmal

public void setAuthorities(List<GrantedAuthority> authorities) { 
    this.roles = roles; 
} 

public void setAuthorities(List<GrantedAuthority> authorities) { 
    this.roles = authorities; 
} 
+0

Ben aptal mı kör mü? :( – Someone

+0

@AbcXyz İşler gerçekleşiyor: Rol mülkiyeti için ayarlayıcı adlandırma kuralını takip etmiyor ve bu sizin hatayı yapmanıza neden olabilir. Yeniden adlandırmak daha iyi olur. – Evgeny

İlgili konular