アプリケーションシナリオ
Springsecurityoauth2には奇妙なデザインがあります。つまり、Access_Tokenに関連するすべての持ち物をOAUTH2ACCESSTOKENにカプセル化し、保存するとオブジェクトを直接バイトにシリアル化してデータベースに書き込みます。リソースサーバーでデータベースを直接読み取り、Access_Tokenを取得してトークンの有効性を確認したいと考えていますが、Springsecurity関連の依存関係の汚染JARパッケージを導入したくありません。現時点では、スプリングスセキュリティの唯一の実装クラスのdeformation defulalyoauth2accesstokenのソースコードをプロジェクトにコピーし、JDBCを介してbyte []を読み取り、JDK独自のデキシラ化メカニズムを介してdefaultoauth2accestokenオブジェクトを復元できます。この時点で、問題に遭遇します。つまり、元のOAuth2Accestokenパッケージはorg.springframework.securityで始まり、ソースコードをコピーした後、パッケージ名はパッケージcn.com.xxxxで始まります。このようにして、2つのクラスのフィールドがまったく同じであっても、敏arialializainizingの場合、バイトストリームに保存されているクラス情報の異なる完全に適格な名前によって脱出障害が引き起こされます。
解決
サブクラスを定義して、JDKのObjectInputStreamを継承してから、readClassDescriptor()メソッドをオーバーライドできます。
@Override Protected ObjectStreamClass ReadClassDescriptor()Throws IOException、ClassNotFoundException {objectStreamClass read = super.readclassdescriptor(); if(read.getName()。 objectStreamClass.Lookup(type);} return read;}このようにして、敏arialializingにエラーはありません。原則は複雑ではありません。実際、バイトストリームを解析する場合、org.springframework.security.outh2.common.defautoauthtokenとして解析する必要があるクラスは、cn.com.xxxxxx.defaultoauthtokenに置き換えられます。このシナリオでは、リソースプロバイダーにSpringsecurityフレームワークを導入することなく、Springsecurityoauth2の認証サービスのみを使用できます。リソースプロバイダーは、データベースを直接読み取り、承認されたサービスを照会するのではなく、トークンの有効性を確認します。
要約します
上記は、JDKの崩壊中の修正クラスの完全な名前の名前解決に関する本記事の全体的な内容です。私はそれが誰にでも役立つことを願っています。興味のある友人は、このサイトの他の関連トピックを引き続き参照できます。欠点がある場合は、それを指摘するためにメッセージを残してください。このサイトへのご支援をありがとうございました!