2016-03-29 22 views
0

私はJava SpringでWebアプリケーションを作成しています。私はいくつかのトラブルの原因となるコードのこの部分を持っている:当局リストはIllegalArgumentException:権限リストがnullであってはなりません

これはnullであってはならない。

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); 

最後の行は、例外

java.lang.IllegalArgumentExceptionがの原因となりますMyUserDetailsクラス:

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; 
} 
} 

これはクラスMyユーザー:

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; 
    } 

} 

このトピック上の任意のアイデアやアドバイスは非常に理解されるであろう。 MyUserクラスで

+0

と交換してください。 –

+0

質問を編集しました。 – Someone

+0

あなたの投稿に矛盾があり、何が何であるのか分かりません:_ "これはMyUserDetailsクラスです" _しかしコンストラクタは 'UserRepositoryUserDetails'です。また、 'UserDB'とは何ですか?リストがあなたの思うように設定されていないことは明らかですが、コードを見ることはできません。 –

答えて

1

は、あなたが最も重要な部分、setAuthorities `の宣言を()`省略

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

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

私は愚かか盲目ですか? : – Someone

+0

@AbcXyzロールのプロパティのセッターは命名規則に従わず、間違えたかもしれません。名前を変更する方が良いでしょう。 – Evgeny

関連する問題