Spring Boot登录时触发UnsupportedOperationException问题求助
你遇到的问题根源很明确:Java 16及以上版本中,Stream的toList()方法返回的是不可变列表(属于ImmutableCollections系列),这种列表不支持add、remove等修改操作,所以调用authorities.add(...)时直接抛出了不支持操作的异常。
以下是几种可行的解决办法:
方案一:将不可变列表转为可变的ArrayList
直接用ArrayList包装stream生成的不可变列表,这样就能正常添加元素了:public List<SimpleGrantedAuthority> getAuthorities() { List<SimpleGrantedAuthority> authorities = new ArrayList<>(getPermissions() .stream() .map(permission -> new SimpleGrantedAuthority(permission.getName())) .toList()); authorities.add(new SimpleGrantedAuthority("ROLE_" + this.name)); return authorities; }方案二:通过Stream合并一次性生成完整列表
不用后续添加,直接把角色权限和已有权限合并到同一个流中,一步生成最终列表,更简洁:public List<SimpleGrantedAuthority> getAuthorities() { return Stream.concat( getPermissions().stream() .map(permission -> new SimpleGrantedAuthority(permission.getName())), Stream.of(new SimpleGrantedAuthority("ROLE_" + this.name)) ).toList(); }方案三:使用Collectors.toList()生成可变列表
替换stream().toList()为Collectors.toList()(需要导入java.util.stream.Collectors),它在多数场景下返回的是可变列表:public List<SimpleGrantedAuthority> getAuthorities() { List<SimpleGrantedAuthority> authorities = getPermissions() .stream() .map(permission -> new SimpleGrantedAuthority(permission.getName())) .collect(Collectors.toList()); authorities.add(new SimpleGrantedAuthority("ROLE_" + this.name)); return authorities; }
内容的提问来源于stack exchange,提问作者Francesco Girardi
相关产品推荐
相关产品推荐

