最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

JDK反序列化時修改類的全限定性名解析

 更新時間:2017年12月20日 16:47:01   作者:司青  
這篇文章主要介紹了JDK反序列化時修改類的全限定性名解析,具有一定借鑒價值,需要的朋友可以參考下。

應用場景

SpringSecurityOAuth2有一個奇葩的設計,那就是它將與access_token相關的所有屬于都封裝到OAuth2AccessToken中,然后保存時會直接將該對象序列化成字節(jié)寫入數據庫。我們在資源服務器中想要直接讀數據庫來取出access_token來驗證令牌的有效性,然而又不想引入SpringSecurity的相關依賴污染jar包。這時可以將SpringSecurity中OAuth2AccessToken的唯一實現(xiàn)類DefaultOAuth2AccessToken的源碼copy到我們的項目中,然后通過JDBC讀取byte[],通過JDK自帶的反序列化機制來還原DefaultOAuth2AccessToken對象。這時就會遇到問題,即原來的OAuth2AccessToken所在包是以org.springframework.security開頭的,而我們copy過來源碼后,包名是以我們自己定義的包cn.com.XXXX開頭的,這樣在反序列化時,即使兩個類的字段完全一樣,但由于字節(jié)流中存儲的類信息的全限定性名不同,也會導致反序列化失敗。

解決方案

我們可以定義子類繼承JDK的ObjectInputStream,然后重寫readClassDescriptor()方法:

@Override
    protected ObjectStreamClass readClassDescriptor() throws IOException, ClassNotFoundException {
	ObjectStreamClass read = super.readClassDescriptor();
	if (read.getName().startsWith("原包名")) {
		Class type = Class.forName(read.getName().replace("新包名"));
		return ObjectStreamClass.lookup(type);
	}
	return read;
}

這樣在反序列化時就不會報錯了。原理并不復雜,其實就是在解析字節(jié)流時,將解析后應為org.springframework.security.oauth2.common.DefautOAuthToken的class,替換成了我們自己copy過來源碼的cn.com.XXXXXX.DefaultOAuthToken從而達到”欺騙”的目的。在該場景下,我們就可以做到在資源提供方不引入SpringSecurity框架而只使用SpringSecurityOAuth2的授權服務。資源提供方直接讀數據庫來驗證令牌的有效性,而不是向授權服務查詢。

總結

以上就是本文關于JDK反序列化時修改類的全限定性名解析的全部內容,希望對大家有所幫助。感興趣的朋友可以繼續(xù)參閱本站其它相關專題,如有不足之處,歡迎留言指出。感謝朋友們對本站的支持!

相關文章

  • 全面解讀Java?NIO(看這篇就夠了)

    全面解讀Java?NIO(看這篇就夠了)

    Java?NIO是Java1.4之后推出來的一套IO接口,NIO提供了一種完全不同的操作方式,?NIO支持面向緩沖區(qū)的、基于通道的IO操作,這篇文章主要介紹了Java?NIO詳解(看這篇就夠了),需要的朋友可以參考下
    2023-05-05
  • JAVA中的 map,list,set

    JAVA中的 map,list,set

    這篇文章主要介紹了JAVA中的 map、list、set這三個集合,下面文章圍繞JAVA中的三大集合 map、list、set詳情講解,需要的朋友可以參考一下
    2021-11-11
  • SpringBoot整合WebSocket的客戶端和服務端的實現(xiàn)代碼

    SpringBoot整合WebSocket的客戶端和服務端的實現(xiàn)代碼

    這篇文章主要介紹了SpringBoot整合WebSocket的客戶端和服務端的實現(xiàn),本文通過實例代碼給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-07-07
  • SpringMVC前后端傳值的幾種實現(xiàn)方式

    SpringMVC前后端傳值的幾種實現(xiàn)方式

    本文主要介紹了SpringMVC前后端傳值的方式實現(xiàn),包括使用HttpServletRequest、HttpSession、Model和ModelAndView等方法,具有一定的參考價值,感興趣的可以了解一下
    2025-02-02
  • 關于@GetMapping和@GetMapping(value=““)的區(qū)別

    關于@GetMapping和@GetMapping(value=““)的區(qū)別

    這篇文章主要介紹了關于@GetMapping和@GetMapping(value=““)的區(qū)別說明,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-05-05
  • java實現(xiàn)  微博登錄、微信登錄、qq登錄實現(xiàn)代碼

    java實現(xiàn) 微博登錄、微信登錄、qq登錄實現(xiàn)代碼

    這篇文章主要介紹了java實現(xiàn) 微博登錄、微信登錄、qq登錄實現(xiàn)代碼的相關資料,需要的朋友可以參考下
    2016-10-10
  • SpringSecurity中內置過濾器的使用小結

    SpringSecurity中內置過濾器的使用小結

    SpringSecurity通過其復雜的過濾器鏈機制,為Java應用提供了全面的安全防護,本文主要介紹了SpringSecurity中內置過濾器的使用小結,感性的可以了解一下
    2025-03-03
  • java實現(xiàn)字符串排列組合問題

    java實現(xiàn)字符串排列組合問題

    這篇文章主要為大家詳細介紹了java實現(xiàn)字符串排列組合問題,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-02-02
  • 詳解使用Spring Boot的AOP處理自定義注解

    詳解使用Spring Boot的AOP處理自定義注解

    本篇文章主要介紹了詳解使用Spring Boot的AOP處理自定義注解,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-01-01
  • Spring AI源碼分析流式回答(最新推薦)

    Spring AI源碼分析流式回答(最新推薦)

    本文我們將重點講解流式響應的概念與實現(xiàn),畢竟,AI的流式回答功能與其交互體驗密切相關,是提升用戶滿意度的重要組成部分,我們將通過代碼示例來展示這一過程,幫助您更清晰地理解如何在實際應用中進行操作,感興趣的朋友一起看看吧
    2024-11-11

最新評論

泉州市| 新河县| 白银市| 阿巴嘎旗| 封丘县| 怀安县| 临泽县| 邻水| 永兴县| 宜君县| 南雄市| 临颍县| 辉县市| 胶南市| 五台县| 富民县| 绥棱县| 西宁市| 尖扎县| 祁门县| 福海县| 龙游县| 边坝县| 双鸭山市| 丹凤县| 苏尼特左旗| 元阳县| 定南县| 永宁县| 全椒县| 珠海市| 江油市| 碌曲县| 嘉禾县| 河北省| 双鸭山市| 辉县市| 桂阳县| 阳朔县| 巴林右旗| 嵊州市|