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