这期内容当中小编将会给大家带来有关如何解决SpringSecurityOAuth2 redis反序列失败问题,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。
10年积累的成都网站设计、网站建设经验,可以快速应对客户对网站的新想法和需求。提供各种问题对应的解决方案。让选择我们的客户得到更好、更有力的网络服务。我虽然不认识你,你也不认识我。但先网站设计后付款的网站建设流程,更有科尔沁免费网站建设让你可以放心的选择与我们合作。
当在认证服务同时进行token获取以及token资源认证可以使用的时候。然后把资源服务整合到其他资源,在这同时又自定义是实现了UserDetails并重写了该接口方法,自定义实现了UserDetailsService,并重写了接口方法,返回使用的是自定义实现的UserDetails。在资源服务器认证token的时候就会出现redis序列化失败的问题, 示例:
/** * @Description 自定义实现UserDetails * @Author wwz * @Date 2019/07/28 * @Param * @Return */ @Data public class MyUserDetails implements UserDetails { private AuthUser user; private Collection extends GrantedAuthority> authorities; public MyUserDetails(AuthUser user, Collection extends GrantedAuthority> authorities) { this.user = user; this.authorities = authorities; } public MyUserDetails() { } @Override public Collection extends GrantedAuthority> getAuthorities() { return authorities; } 其他省略......
/** * @Description 自定义用户验证数据 * @Author wwz * @Date 2019/07/28 * @Param * @Return */ @Service public class MyUserDetailsService implements UserDetailsService { @Autowired private AuthUserMapper authUserMapper; @Override public UserDetails loadUserByUsername(String username) throws UsernameNotFoundException { // 自定义用户权限数据 AuthUser authUser = authUserMapper.selectByUsername(username); if (authUser == null) { throw new UsernameNotFoundException("用户名不存在"); } if (!authUser.getValid()) { throw new UsernameNotFoundException("用户不可用"); } SetgrantedAuthorities = new HashSet<>(); // 中间逻辑省略。。。。。。 MyUserDetails userDetails = new MyUserDetails(authUser, grantedAuthorities); return userDetails; } }
org.springframework.data.redis.serializer.SerializationException
导致问题的原因是,在生成token的时候使用了自定义的UserDetails的进行了token序列化,反序列化的时候,在新项目中找不到自定义的实现,只能使用默认的实现来。 解决的方案是就是把自定义实现的UserDetails复制一份到资源项目中。
上述就是小编为大家分享的如何解决SpringSecurityOAuth2 redis反序列失败问题了,如果刚好有类似的疑惑,不妨参照上述分析进行理解。如果想知道更多相关知识,欢迎关注创新互联行业资讯频道。