2017-05-31 231 views
1

我在與Java 8的Java應用程序的工作,使用流功能 我有這樣的POJO:Lambda表達式

public class Authority implements GrantedAuthority { 

    /** 
    * 
    */ 
    private static final long serialVersionUID = 1L; 


    private final String authority; 

    public Authority(String authority) { 

     this.authority = authority; 
    } 


    @Override 
    public String getAuthority() { 
     return authority; 
    } 


    @Override 
    public String toString() { 
     return "Authority [authority=" + authority + "]"; 
    } 
} 

public class User implements Serializable, UserDetails { 

    @Override 
    public Collection<? extends GrantedAuthority> getAuthorities() { 
     Set<GrantedAuthority> authorities = new HashSet<>(); 
     userRoles.forEach(ur -> authorities.add(new Authority(ur.getRole().getName()))); 
     return authorities; 
    } 

    public boolean isAdmin() { 
     return getAuthorities().stream().filter 
      (o -> o.getAuthority().equals(RolesEnum.ADMIN)).findFirst().isPresent(); 
    } 
} 

,我已經創建此Junit來檢查是否一切正常

@Test 
    public void isAdminTests() { 

     User adminUser = UserUtils.createBasicUser("[email protected]", "[email protected]", true); 
     Set<UserRole> adminUserRoles = new HashSet<>(); 
     adminUserRoles.add(new UserRole(adminUser, new Role(RolesEnum.ADMIN))); 
     adminUser.getUserRoles().addAll(adminUserRoles); 

     System.out.print(adminUser.getAuthorities()); 

     assertTrue (adminUser.isAdmin()); 

    } 

並且這是控制檯中的值:

[Authority [authority=ROLE_ADMIN]] 

但是我有一個斷言錯誤

+0

看起來像您的'isAdmin()'返回false。試過調試過嗎? – Shark

+0

「Authority」類是怎麼樣的? –

+0

'User'中的userRoles是什麼? –

回答

4

我的猜測是,你用枚舉對象

o.getAuthority().equals(RolesEnum.ADMIN)) 

你必須將這兩種比較比較管理局對象(這是一個字符串IIRC)不同勢對象,以便匹配是可能

你可以嘗試

o.getAuthority().equals(RolesEnum.ADMIN.name())) 

當您可以確保枚舉名稱始終與角色名稱相同。

+1

或'RolesEnum.ADMIN.toString()' –

1

不知道,但嘗試這個辦法:

這裏

public boolean isAdmin() { 
     return getAuthorities().stream().filter 
       (o -> o.getAuthority().equals(RolesEnum.ADMIN)).findFirst().isPresent(); 
    } 

變化水木清華這樣的:

o.getAuthority().equals(new GrantedAuthority(RolesEnum.Admin.name()))).findFirst().isPresent(); 

因爲當你創建春天當局 「ROLE_」 默認情況下添加字符串角色表示的前綴