簡體   English   中英

列表中的Lambda表達式不起作用

[英]Lambda expression in a List not working

我正在使用Java 8在Java應用程序中工作,使用流功能有以下POJO:

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("user2@gmail.com", "user2@gmail.com", 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]]

但是我有一個斷言錯誤

我的猜測是,您將授權對象(是字符串IIRC)與枚舉對象進行了比較

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

您必須比較這兩個不同的對象,以便可能進行匹配

你可以試試

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

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

不知道,但是嘗試這個:

這里

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_”作為前綴

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM