有一个包含用户权限的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>
如果oAuth2Authentication.getAuthorities()
是List
,你可以轻松地从它创建一个Set
:
user.setAuthorities(new HashSet<GrantedAuthority>(oAuth2Authentication.getAuthorities()));
请注意,GrantedAuthority
应该正确实现hashCode()
和equals()
,以便用作HashSet
的成员。