⑴ 寫webservice為什麼要序列化
webservice 是基於http的 也就是走tcp/ip協議傳輸 需要通過網路傳輸的所有東東都需要進行序列化 和反序列化
⑵ spring mvc怎麼實現dto自動序列化反序列化
一、序列化和反序列化的概念
把對象轉換為位元組序列的過程稱為對象的序列化。
把位元組序列恢復為對象的過程稱為對象的反序列化。
對象的序列化主要有兩種用途:
1) 把對象的位元組序列永久地保存到硬碟上,通常存放在一個文件中;
2) 在網路上傳送對象的位元組序列。
在很多應用中,需要對某些對象進行序列化,讓它們離開內存空間,入住物理硬碟,以便長期保存。比如最常見的是Web伺服器中的Session對象,當有 10萬用戶並發訪問,就有可能出現10萬個Session對象,內存可能吃不消,於是Web容器就會把一些seesion先序列化到硬碟中,等要用了,再把保存在硬碟中的對象還原到內存中。
當兩個進程在進行遠程通信時,彼此可以發送各種類型的數據。無論是何種類型的數據,都會以二進制序列的形式在網路上傳送。發送方需要把這個Java對象轉換為位元組序列,才能在網路上傳送;接收方則需要把位元組序列再恢復為Java對象。
二、JDK類庫中的序列化API
java.io.ObjectOutputStream代表對象輸出流,它的writeObject(Object obj)方法可對參數指定的obj對象進行序列化,把得到的位元組序列寫到一個目標輸出流中。
java.io.ObjectInputStream代表對象輸入流,它的readObject()方法從一個源輸入流中讀取位元組序列,再把它們反序列化為一個對象,並將其返回。
只有實現了Serializable和Externalizable介面的類的對象才能被序列化。Externalizable介面繼承自 Serializable介面,實現Externalizable介面的類完全由自身來控制序列化的行為,而僅實現Serializable介面的類可以 採用默認的序列化方式 。
對象序列化包括如下步驟:
1) 創建一個對象輸出流,它可以包裝一個其他類型的目標輸出流,如文件輸出流;
2) 通過對象輸出流的writeObject()方法寫對象。
對象反序列化的步驟如下:
1) 創建一個對象輸入流,它可以包裝一個其他類型的源輸入流,如文件輸入流;
2) 通過對象輸入流的readObject()方法讀取對象。
對象序列化和反序列範例:
定義一個Person類,實現Serializable介面
1 import java.io.Serializable;
2
3 /**
4 * <p>ClassName: Person<p>
5 * <p>Description:測試對象序列化和反序列化<p>
6 * @author xudp
7 * @version 1.0 V
8 * @createTime 2014-6-9 下午02:33:25
9 */
10 public class Person implements Serializable {
11
12 /**
13 * 序列化ID
14 */
15 private static final long serialVersionUID = -5809782578272943999L;
16 private int age;
17 private String name;
18 private String sex;
19
20 public int getAge() {
21 return age;
22 }
23
24 public String getName() {
25 return name;
26 }
27
28 public String getSex() {
29 return sex;
30 }
31
32 public void setAge(int age) {
33 this.age = age;
34 }
35
36 public void setName(String name) {
37 this.name = name;
38 }
39
40 public void setSex(String sex) {
41 this.sex = sex;
42 }
43 }
序列化和反序列化Person類對象
1 import java.io.File;
2 import java.io.FileInputStream;
3 import java.io.FileNotFoundException;
4 import java.io.FileOutputStream;
5 import java.io.IOException;
6 import java.io.ObjectInputStream;
7 import java.io.ObjectOutputStream;
8 import java.text.MessageFormat;
9
10 /**
11 * <p>ClassName: <p>
12 * <p>Description: 測試對象的序列化和反序列<p>
13 * @author xudp
14 * @version 1.0 V
15 * @createTime 2014-6-9 下午03:17:25
16 */
17 public class {
18
19 public static void main(String[] args) throws Exception {
20 SerializePerson();//序列化Person對象
21 Person p = DeserializePerson();//反序列Perons對象
22 System.out.println(MessageFormat.format("name={0},age={1},sex={2}",
23 p.getName(), p.getAge(), p.getSex()));
24 }
25
26 /**
27 * MethodName: SerializePerson
28 * Description: 序列化Person對象
29 * @author xudp
30 * @throws FileNotFoundException
31 * @throws IOException
32 */
33 private static void SerializePerson() throws FileNotFoundException,
34 IOException {
35 Person person = new Person();
36 person.setName("gacl");
37 person.setAge(25);
38 person.setSex("男");
39 // ObjectOutputStream 對象輸出流,將Person對象存儲到E盤的Person.txt文件中,完成對Person對象的序列化操作
40 ObjectOutputStream oo = new ObjectOutputStream(new FileOutputStream(
41 new File("E:/Person.txt")));
42 oo.writeObject(person);
43 System.out.println("Person對象序列化成功!");
44 oo.close();
45 }
46
47 /**
48 * MethodName: DeserializePerson
49 * Description: 反序列Perons對象
50 * @author xudp
51 * @return
52 * @throws Exception
53 * @throws IOException
54 */
55 private static Person DeserializePerson() throws Exception, IOException {
56 ObjectInputStream ois = new ObjectInputStream(new FileInputStream(
57 new File("E:/Person.txt")));
58 Person person = (Person) ois.readObject();
59 System.out.println("Person對象反序列化成功!");
60 return person;
61 }
62
63 }
⑶ java客戶端調用C#的web service為什麼拋出反序列化的異常
用的是哪個web service框架,對於一般數據類型若該框架是完全遵循web service規范的話不應該會出現序列化跟反序列化錯誤的,因為都是序列化成web service標準的中間格式,應該是對於對象的序列化跟反序列化出問題吧,這個問題就要具體看你的對象的屬性有什麼奇怪的東西了
⑷ 是否 有 java反序列化漏洞
java反序列化漏洞是一類被廣泛應用的漏洞,絕大多數的編程語言都會提供內建方法使用戶可以將自身應用所產生的數據存入硬碟或通過網路傳輸出去。這種將應用數據轉化為其他格式的過程稱之為序列化,而將讀取序列化數據的過程稱之為反序列化。
當應用代碼從用戶接受序列化數據並試圖反序列化改數據進行下一步處理時會產生反序列化漏洞。該漏洞在不同的語言環境下會導致多種結果,但最有危害性的,也是之後我們即將討論的是遠程代碼注入。
2.java反序列化漏洞發現歷程
在最近幾年間,不斷的有java反序列化漏洞被曝光。最近的幾次分別產生於spring框架以及Groovy還有文件上傳的java庫中,這些漏洞均得到了修復。
但在最近的研究中,安全人員發現java反序列漏洞遠遠不止上述幾處,該漏洞廣泛的存在於java庫中。
Java反序列化漏洞:
漏洞產生原因:
在java編寫的web應用與web伺服器間java通常會發送大量的序列化對象例如以下場景:
HTTP請求中的參數,cookies以及Parameters。
RMI協議,被廣泛使用的RMI協議完全基於序列化
JMX 同樣用於處理序列化對象
自定義協議 用來接收與發送原始的java對象
在序列化過程中會使用ObjectOutputStream類的writeObject()方法,在接收數據後一般又會採用ObjectInputStream類的readObject()方法進行反序列化讀取數據。其代碼示例如下:
上述代碼中的java類ObjectInputStream在執行反序列化時並不會對自身的輸入進行檢查,意味著一種可能性,即惡意攻擊者構建特定的輸入,在ObjectInputStream類反序列化之後會產生非正常結果。而根據最新的研究,利用這一方法可以實現遠程執行任意代碼。
⑸ WebSphere Commons Collections組件反序列化漏洞
1,是可以修復電腦漏洞的 2,這個修復電腦漏洞,不論什麼樣的電腦系統都是很需要的 3,可以使用電腦管家,有一個修復漏洞,然後使用它來檢測電腦裡面的漏洞並修復
⑹ WebService 序列化反序列化 反悔自定義對象錯誤,各路大俠來看看。
WebService會把 你數據Model層的所有對象映射到 WebService, 實際上是新的類型,當然不能直接轉換。 你應該 用 WebService層中的 yhModel 類型而不是數據層中的該類型
⑺ 用CXF訪問遠程WebService返回一個對象,如何反序列化這個對象
你可以研究一下java.nio.這個包中得bytebuffer
⑻ 序列化和反序列化有幾種方式分別是什麼
截止至.NET 4.0總共有如下若干個序列化類
1.xml序列化 XmlSerializer
2.二進制序列化 BinaryFormatter
3.Soap序列化 SoapFormatter
4.WCF序列化 DataContractSerializer
5.Json序列化 DataContractJsonSerializer和JavascriptSerializer
⑼ .net 序列化與反序列化的一個問題,望牛人指教~~~
看不到你的代碼 不知道是怎麼寫的 提供一下的我自己的序列化方法
需要序列化的class前面加[Serializable]關鍵字:
//實例化MemoryStream
MemoryStream memoryStream = new MemoryStream();
//實例化Formatter
BinaryFormatter formatter = new BinaryFormatter();
//序列化類為base64字元串
formatter.Serialize(memoryStream, this);
//設定文件流中的位置
memoryStream.Position = 0;
//反序列化,在你的實例中memoryStream就是取到的序列化後的字元串
formatter.Deserialize(memoryStream);
Deserialize返回是一個object類型,可以強制轉化為原始的類
本人這樣在實際中使用沒有問題,你如果無法使用,貼下代碼出來