Browse Source

通讯协议二进制据增强校验,处理非正常请求;

xueli.xue 8 years ago
parent
commit
e7d1354098

+ 1 - 0
README.md View File

768
 
768
 
769
 #### 6.12 版本 V1.6.1 特性 (Coding)
769
 #### 6.12 版本 V1.6.1 特性 (Coding)
770
 - 1、rolling日志,日志界面风格同glue任务编辑器;
770
 - 1、rolling日志,日志界面风格同glue任务编辑器;
771
+- 2、
771
 
772
 
772
 
773
 
773
 #### TODO LIST
774
 #### TODO LIST

+ 25 - 3
xxl-job-core/src/main/java/com/xxl/job/core/rpc/netcom/jetty/client/JettyClient.java View File

4
 import com.xxl.job.core.rpc.codec.RpcResponse;
4
 import com.xxl.job.core.rpc.codec.RpcResponse;
5
 import com.xxl.job.core.rpc.serialize.HessianSerializer;
5
 import com.xxl.job.core.rpc.serialize.HessianSerializer;
6
 import com.xxl.job.core.util.HttpClientUtil;
6
 import com.xxl.job.core.util.HttpClientUtil;
7
+import org.slf4j.Logger;
8
+import org.slf4j.LoggerFactory;
7
 
9
 
8
 /**
10
 /**
9
  * jetty client
11
  * jetty client
10
  * @author xuxueli 2015-11-24 22:25:15
12
  * @author xuxueli 2015-11-24 22:25:15
11
  */
13
  */
12
 public class JettyClient {
14
 public class JettyClient {
15
+	private static Logger logger = LoggerFactory.getLogger(JettyClient.class);
13
 
16
 
14
 	public RpcResponse send(RpcRequest request) throws Exception {
17
 	public RpcResponse send(RpcRequest request) throws Exception {
15
-		byte[] requestBytes = HessianSerializer.serialize(request);
16
-		byte[] responseBytes = HttpClientUtil.postRequest("http://" + request.getServerAddress() + "/", requestBytes);
17
-		return (RpcResponse) HessianSerializer.deserialize(responseBytes, RpcResponse.class);
18
+		try {
19
+			// serialize request
20
+			byte[] requestBytes = HessianSerializer.serialize(request);
21
+
22
+			// remote invoke
23
+			byte[] responseBytes = HttpClientUtil.postRequest("http://" + request.getServerAddress() + "/", requestBytes);
24
+			if (responseBytes == null || responseBytes.length==0) {
25
+				RpcResponse rpcResponse = new RpcResponse();
26
+				rpcResponse.setError("RpcResponse byte[] is null");
27
+				return rpcResponse;
28
+            }
29
+
30
+            // deserialize response
31
+			RpcResponse rpcResponse = (RpcResponse) HessianSerializer.deserialize(responseBytes, RpcResponse.class);
32
+			return rpcResponse;
33
+		} catch (Exception e) {
34
+			logger.error(e.getMessage(), e);
35
+
36
+			RpcResponse rpcResponse = new RpcResponse();
37
+			rpcResponse.setError("Servet-error:" + e.getMessage());
38
+			return rpcResponse;
39
+		}
18
 	}
40
 	}
19
 
41
 
20
 }
42
 }

+ 27 - 6
xxl-job-core/src/main/java/com/xxl/job/core/rpc/netcom/jetty/server/JettyServerHandler.java View File

7
 import com.xxl.job.core.util.HttpClientUtil;
7
 import com.xxl.job.core.util.HttpClientUtil;
8
 import org.eclipse.jetty.server.Request;
8
 import org.eclipse.jetty.server.Request;
9
 import org.eclipse.jetty.server.handler.AbstractHandler;
9
 import org.eclipse.jetty.server.handler.AbstractHandler;
10
+import org.slf4j.Logger;
11
+import org.slf4j.LoggerFactory;
10
 
12
 
11
 import javax.servlet.ServletException;
13
 import javax.servlet.ServletException;
12
 import javax.servlet.http.HttpServletRequest;
14
 import javax.servlet.http.HttpServletRequest;
19
  * @author xuxueli 2015-11-19 22:32:36
21
  * @author xuxueli 2015-11-19 22:32:36
20
  */
22
  */
21
 public class JettyServerHandler extends AbstractHandler {
23
 public class JettyServerHandler extends AbstractHandler {
22
-
24
+	private static Logger logger = LoggerFactory.getLogger(JettyServerHandler.class);
23
 
25
 
24
 	@Override
26
 	@Override
25
 	public void handle(String target, Request baseRequest, HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException {
27
 	public void handle(String target, Request baseRequest, HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException {
26
 		
28
 		
27
-		// deserialize request
28
-		byte[] requestBytes = HttpClientUtil.readBytes(request);
29
-		RpcRequest rpcRequest = (RpcRequest) HessianSerializer.deserialize(requestBytes, RpcRequest.class);
30
-		
31
 		// invoke
29
 		// invoke
32
-        RpcResponse rpcResponse = NetComServerFactory.invokeService(rpcRequest, null);
30
+        RpcResponse rpcResponse = doInvoke(request);
33
 
31
 
34
         // serialize response
32
         // serialize response
35
         byte[] responseBytes = HessianSerializer.serialize(rpcResponse);
33
         byte[] responseBytes = HessianSerializer.serialize(rpcResponse);
44
 		
42
 		
45
 	}
43
 	}
46
 
44
 
45
+	private RpcResponse doInvoke(HttpServletRequest request) {
46
+		try {
47
+			// deserialize request
48
+			byte[] requestBytes = HttpClientUtil.readBytes(request);
49
+			if (requestBytes == null || requestBytes.length==0) {
50
+				RpcResponse rpcResponse = new RpcResponse();
51
+				rpcResponse.setError("RpcRequest byte[] is null");
52
+				return rpcResponse;
53
+			}
54
+			RpcRequest rpcRequest = (RpcRequest) HessianSerializer.deserialize(requestBytes, RpcRequest.class);
55
+
56
+			// invoke
57
+			RpcResponse rpcResponse = NetComServerFactory.invokeService(rpcRequest, null);
58
+			return rpcResponse;
59
+		} catch (Exception e) {
60
+			logger.error(e.getMessage(), e);
61
+
62
+			RpcResponse rpcResponse = new RpcResponse();
63
+			rpcResponse.setError("Servet-error:" + e.getMessage());
64
+			return rpcResponse;
65
+		}
66
+	}
67
+
47
 }
68
 }

+ 3 - 7
xxl-job-core/src/main/java/com/xxl/job/core/util/HttpClientUtil.java View File

1
 package com.xxl.job.core.util;
1
 package com.xxl.job.core.util;
2
 
2
 
3
-import com.xxl.job.core.rpc.codec.RpcResponse;
4
-import com.xxl.job.core.rpc.serialize.HessianSerializer;
5
 import org.apache.http.HttpEntity;
3
 import org.apache.http.HttpEntity;
6
 import org.apache.http.HttpResponse;
4
 import org.apache.http.HttpResponse;
7
 import org.apache.http.client.methods.HttpPost;
5
 import org.apache.http.client.methods.HttpPost;
27
 	/**
25
 	/**
28
 	 * post request
26
 	 * post request
29
 	 */
27
 	 */
30
-	public static byte[] postRequest(String reqURL, byte[] date) {
28
+	public static byte[] postRequest(String reqURL, byte[] date) throws Exception {
31
 		byte[] responseBytes = null;
29
 		byte[] responseBytes = null;
32
 		
30
 		
33
 		HttpPost httpPost = new HttpPost(reqURL);
31
 		HttpPost httpPost = new HttpPost(reqURL);
53
 			}
51
 			}
54
 		} catch (Exception e) {
52
 		} catch (Exception e) {
55
 			logger.error("", e);
53
 			logger.error("", e);
56
-
57
-			RpcResponse rpcResponse = new RpcResponse();
58
-			rpcResponse.setError(e.getMessage());
59
-			responseBytes = HessianSerializer.serialize(rpcResponse);
54
+			throw e;
60
 		} finally {
55
 		} finally {
61
 			httpPost.releaseConnection();
56
 			httpPost.releaseConnection();
62
 			try {
57
 			try {
93
 				return message;
88
 				return message;
94
 			} catch (IOException e) {
89
 			} catch (IOException e) {
95
 				e.printStackTrace();
90
 				e.printStackTrace();
91
+				throw e;
96
 			}
92
 			}
97
 		}
93
 		}
98
 		return new byte[] {};
94
 		return new byte[] {};