Cenários de aplicação
O SpringSecurityOAuth2 tem um design estranho, ou seja, ele encapsula todos os pertences relacionados a Access_token no OAuth2AccessToken e, quando salvos, ele serializará diretamente o objeto em bytes e o escreverá no banco de dados. Queremos ler o banco de dados diretamente no servidor de recursos para recuperar o access_token para verificar a validade do token, mas não queremos introduzir pacotes de jar poluidores de dependência relacionados à SpringSecurity. No momento, você pode copiar o código -fonte da única classe de implementação DefaultOAuth2AccessToken no SpringSecurity em nosso projeto e depois ler byte [] através do JDBC e restaurar o objeto DefantoAuth2AccessToken através do próprio mecanismo de deserialização do JDK. No momento, você encontrará um problema, ou seja, o pacote original OAuth2AccessToken começa com org.springframework.security e, depois de copiarmos o código -fonte, o nome do pacote começa com o pacote cn.com.xxxx, que nos definimos. Dessa forma, ao seriarizar, mesmo que os campos das duas classes sejam exatamente iguais, a falha de deserialização será causada pelos diferentes nomes totalmente qualificados das informações de classe armazenadas no fluxo de bytes.
Solução
Podemos definir a subclasse herda o objectInputStream do JDK e, em seguida, substituir o método readClassDescriptor ():
@Override Protected ObjectStreamClass readClassDescriptor () lança IoException, classNotFoundException {objectStreamClass read = super.readclassDescriptor (); if (read.getName (). ObjectStreamClass.Lookup (Type);} Return Read;}Dessa forma, não haverá erros ao se deseralizar. O princípio não é complicado. De fato, ao analisar o fluxo de bytes, a classe que deve ser analisada como org.springframework.security.oauth2.common.defaUtoauthToken é substituída pelo cn.com.xxxxxx.defaultOAuthToken Copiamos o código fonte para alcançar o objetivo da "decepção". Nesse cenário, só podemos usar o serviço de autorização do SpringSecurityOAuth2 sem introduzir a estrutura SpringSecurity no provedor de recursos. O provedor de recursos lê o banco de dados diretamente para verificar a validade do token, em vez de consultar o serviço autorizado.
Resumir
O exposto acima é o conteúdo inteiro deste artigo sobre a resolução de nomes de qualificação completa de classes modificadas durante a deserialização do JDK. Espero que seja útil para todos. Amigos interessados podem continuar se referindo a outros tópicos relacionados neste site. Se houver alguma falha, deixe uma mensagem para apontá -la. Obrigado amigos pelo seu apoio para este site!