[英]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.