Skenario Aplikasi
SpringSecurityOAuth2 memiliki desain yang aneh, yaitu merangkum semua barang yang terkait dengan Access_Token ke dalam OAuth2AccessToken, dan kemudian ketika disimpan, itu akan secara langsung membuat serial objek ke dalam byte dan menulisnya ke database. Kami ingin membaca database secara langsung di server sumber daya untuk mengambil akses_token untuk memverifikasi validitas token, tetapi kami tidak ingin memperkenalkan paket guci yang terkait dengan ketergantungan yang terkait dengan Springs. Pada saat ini, Anda dapat menyalin kode sumber dari satu -satunya kelas implementasi defaultOAuth2AccessToken di Springsecurity ke dalam proyek kami, dan kemudian membaca byte [] melalui JDBC, dan mengembalikan objek defaultoAuth2AccessToken melalui mekanisme deserialisasi JDK sendiri. Pada saat ini, Anda akan menghadapi masalah, yaitu, paket OAuth2AccessToken asli dimulai dengan org.springframework.security, dan setelah kami menyalin kode sumber, nama paket dimulai dengan paket cn.com.xxxx, yang kami tentukan sendiri. Dengan cara ini, ketika deserialized, bahkan jika bidang kedua kelas persis sama, kegagalan deserialisasi akan disebabkan oleh berbagai nama informasi yang sepenuhnya memenuhi syarat dari informasi kelas yang disimpan dalam aliran byte.
Larutan
Kita dapat mendefinisikan subkelas mewarisi ObjectInputStream JDK, dan kemudian mengganti metode ReadClassDescriptor ():
@Override Protected ObjectStreamClass ReadClassDescriptor () melempar IoException, ClassNotFoundException {objekStreamClass read = super.readclassdescriptor (); if (read.getName (). StartSwith ("Paket asli")) {class type = class.forname (bacaan (). ObjectStreamClass.LookUp (type);} return Read;}Dengan cara ini, tidak akan ada kesalahan saat deserialisasi. Prinsipnya tidak rumit. Faktanya, ketika menguraikan aliran byte, kelas yang harus diuraikan sebagai org.springframework.security.oauth2.common.defautoAuthToken diganti dengan cn.com.xxxxxx.defaultoauthtoken Kami menyalin kode sumber untuk mencapai tujuan "penipuan". Dalam skenario ini, kita hanya dapat menggunakan layanan otorisasi SpringsecurityOAuth2 tanpa memperkenalkan kerangka kerja SPRINGSECURITY di penyedia sumber daya. Penyedia sumber daya membaca database secara langsung untuk memverifikasi validitas token, daripada menanyakan layanan resmi.
Meringkaskan
Di atas adalah seluruh konten artikel ini tentang resolusi nama kelas yang dimodifikasi penuh selama deserialisasi JDK. Saya harap ini akan membantu semua orang. Teman yang tertarik dapat terus merujuk ke topik terkait lainnya di situs ini. Jika ada kekurangan, silakan tinggalkan pesan untuk menunjukkannya. Terima kasih teman atas dukungan Anda untuk situs ini!