สถานการณ์แอปพลิเคชัน
Springsecurityoauth2 มีการออกแบบแปลก ๆ นั่นคือมันห่อหุ้มข้าวของทั้งหมดที่เกี่ยวข้องกับ access_token ลงใน OAuth2accessToken จากนั้นเมื่อบันทึกไว้มันจะทำให้วัตถุนั้นเป็นอนุกรมโดยตรงและเขียนลงในฐานข้อมูล เราต้องการอ่านฐานข้อมูลโดยตรงในเซิร์ฟเวอร์ทรัพยากรเพื่อดึง Access_Token เพื่อตรวจสอบความถูกต้องของโทเค็น แต่เราไม่ต้องการแนะนำแพ็คเกจการพึ่งพาการพึ่งพาของ Springsecurity ในเวลานี้คุณสามารถคัดลอกซอร์สโค้ดของคลาสการใช้งานเพียงอย่างเดียว defaultoauth2accessToken ใน Springsecurity ลงในโครงการของเราจากนั้นอ่าน BYTE [] ผ่าน JDBC และกู้คืนวัตถุ defaultOauth2AccessToken ผ่านกลไก deserialization ของ JDK ในเวลานี้คุณจะพบปัญหานั่นคือแพ็คเกจ OAuth2AccessToken ดั้งเดิมเริ่มต้นด้วย org.springframework.security และหลังจากเราคัดลอกซอร์สโค้ดชื่อแพ็คเกจเริ่มต้นด้วยแพ็คเกจ cn.com.xxxx ซึ่งเรากำหนดตัวเราเอง ด้วยวิธีนี้เมื่อ deserializing แม้ว่าฟิลด์ของทั้งสองคลาสจะเหมือนกันความล้มเหลวของ deserialization จะเกิดจากชื่อที่มีคุณสมบัติครบถ้วนของข้อมูลคลาสที่เก็บไว้ในสตรีมไบต์
สารละลาย
เราสามารถกำหนดคลาส subclass สืบทอด objectInputStream ของ JDK จากนั้นแทนที่วิธี readClassDescriptor ():
@Override ObjectStreamClass ReadClassDescriptor () พ่น IOException, classnotFoundException {ObjectStreamClass read = super.readClassDescriptor (); ถ้า (read.getName (). startSwith ("ชื่อแพ็คเกจดั้งเดิม)) ObjectStreamclass.lookup (ประเภท);} return read;}ด้วยวิธีนี้จะไม่มีข้อผิดพลาดเมื่อ deserializing หลักการไม่ซับซ้อน ในความเป็นจริงเมื่อแยกแยะกระแสไบต์คลาสที่ควรแยกวิเคราะห์เป็น org.springframework.security.oauth2.common.defautoauthtoken ถูกแทนที่ด้วย cn.com.xxxxx.defaultoauthtoken ในสถานการณ์นี้เราสามารถใช้บริการการอนุญาตของ SpringsecurityOauth2 ได้โดยไม่ต้องแนะนำ Framework Springsecurity ในผู้ให้บริการทรัพยากร ผู้ให้บริการทรัพยากรอ่านฐานข้อมูลโดยตรงเพื่อตรวจสอบความถูกต้องของโทเค็นแทนที่จะสอบถามบริการที่ได้รับอนุญาต
สรุป
ข้างต้นเป็นเนื้อหาทั้งหมดของบทความนี้เกี่ยวกับความละเอียดของชื่อที่ผ่านการรับรองของคลาสที่ได้รับการแก้ไขในระหว่าง JDK Deserialization ฉันหวังว่ามันจะเป็นประโยชน์กับทุกคน เพื่อนที่สนใจสามารถอ้างถึงหัวข้ออื่น ๆ ที่เกี่ยวข้องในเว็บไซต์นี้ต่อไป หากมีข้อบกพร่องใด ๆ โปรดฝากข้อความไว้เพื่อชี้ให้เห็น ขอบคุณเพื่อนที่ให้การสนับสนุนเว็บไซต์นี้!