2017-05-31 278 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_” 默认情况下添加字符串角色表示的前缀