如题
java.lang.ClassCastException: com.alibaba.fastjson2.JSONObject cannot be cast to org.springframework.security.core.GrantedAuthority
原提问者GitHub用户hyuga0410
这个错误是因为将一个 com.alibaba.fastjson2.JSONObject 对象强制转换成了 org.springframework.security.core.GrantedAuthority 对象,两者类型不兼容。
可能的原因是在使用 Spring Security 进行认证和授权时,将 JSON 对象作为权限信息传递给了 org.springframework.security.core.userdetails.User 对象,但是在 UserDetailsService 的实现中,没有正确地将 JSON 对象转换成 GrantedAuthority 对象。
解决这个问题的方法是,在 UserDetailsService 的实现中,将 JSON 对象转换成 GrantedAuthority 对象,例如:
JSONObject jsonAuthority = ...; // 从数据库或其他地方获取 JSON 对象 GrantedAuthority authority = new SimpleGrantedAuthority(jsonAuthority.getString("authority")); java 然后将 GrantedAuthority 对象添加到 UserDetails 对象中,例如:
List authorities = new ArrayList<>(); authorities.add(authority); UserDetails userDetails = new User(username, password, authorities); java 这样就可以避免 ClassCastException 错误。
问题已修复,请用新版本 https://github.com/alibaba/fastjson2/releases/tag/2.0.5
原回答者GitHub用户wenshao
先使用 JSON.parseObject(String str),再使用 JSON.parseArray(String str, Class clasz)
JSONObject msgEncap = JSON.parseObject(text);
List<Record> msgList = JSON.parseArray(msgEncap.getString("msgList"), Record.class);
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。