如何在Java中将UnmodifiableRandomAccessList设置为Set <object>

时间:2019-03-11 14:09:39

标签: java spring-security oauth-2.0 spring-security-oauth2 unmodifiable

有一个包含用户权限的Oauth2Authentication对象。当我想要获得其权限并将其设置为User对象的权限时,如下所示:

OAuth2Authentication oAuth2Authentication = (OAuth2Authentication) SecurityContextHolder.getContext().getAuthentication();

LinkedHashMap linkedHashMap = (LinkedHashMap) oAuth2Authentication.getUserAuthentication().getDetails();


user.setAuthorities((Set<GrantedAuthority>) oAuth2Authentication.getAuthorities());

引发以下异常:

  

java.lang.ClassCastException:   无法将java.util.Collections $ UnmodifiableRandomAccessList强制转换为   java.util.Set

我该如何解决?

注意:
用户对象的权限类型为Set<GrantedAuthority>

1 个答案:

答案 0 :(得分:2)

如果oAuth2Authentication.getAuthorities()List,则可以轻松地从中创建一个Set

user.setAuthorities(new HashSet<GrantedAuthority>(oAuth2Authentication.getAuthorities()));

请注意,GrantedAuthority应该具有hashCode()equals()的正确实现,才能用作HashSet的成员。