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

pull/1/head
xueli.xue 8 years ago
parent 81508178da
commit e7d1354098

@ -768,6 +768,7 @@ Tips: 历史版本(V1.3.x)目前已经Release至稳定版本, 进入维护阶段
#### 6.12 版本 V1.6.1 特性 (Coding) #### 6.12 版本 V1.6.1 特性 (Coding)
- 1、rolling日志日志界面风格同glue任务编辑器 - 1、rolling日志日志界面风格同glue任务编辑器
- 2、
#### TODO LIST #### TODO LIST

@ -4,17 +4,39 @@ import com.xxl.job.core.rpc.codec.RpcRequest;
import com.xxl.job.core.rpc.codec.RpcResponse; import com.xxl.job.core.rpc.codec.RpcResponse;
import com.xxl.job.core.rpc.serialize.HessianSerializer; import com.xxl.job.core.rpc.serialize.HessianSerializer;
import com.xxl.job.core.util.HttpClientUtil; import com.xxl.job.core.util.HttpClientUtil;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
/** /**
* jetty client * jetty client
* @author xuxueli 2015-11-24 22:25:15 * @author xuxueli 2015-11-24 22:25:15
*/ */
public class JettyClient { public class JettyClient {
private static Logger logger = LoggerFactory.getLogger(JettyClient.class);
public RpcResponse send(RpcRequest request) throws Exception { public RpcResponse send(RpcRequest request) throws Exception {
byte[] requestBytes = HessianSerializer.serialize(request); try {
byte[] responseBytes = HttpClientUtil.postRequest("http://" + request.getServerAddress() + "/", requestBytes); // serialize request
return (RpcResponse) HessianSerializer.deserialize(responseBytes, RpcResponse.class); byte[] requestBytes = HessianSerializer.serialize(request);
// remote invoke
byte[] responseBytes = HttpClientUtil.postRequest("http://" + request.getServerAddress() + "/", requestBytes);
if (responseBytes == null || responseBytes.length==0) {
RpcResponse rpcResponse = new RpcResponse();
rpcResponse.setError("RpcResponse byte[] is null");
return rpcResponse;
}
// deserialize response
RpcResponse rpcResponse = (RpcResponse) HessianSerializer.deserialize(responseBytes, RpcResponse.class);
return rpcResponse;
} catch (Exception e) {
logger.error(e.getMessage(), e);
RpcResponse rpcResponse = new RpcResponse();
rpcResponse.setError("Servet-error:" + e.getMessage());
return rpcResponse;
}
} }
} }

@ -7,6 +7,8 @@ import com.xxl.job.core.rpc.serialize.HessianSerializer;
import com.xxl.job.core.util.HttpClientUtil; import com.xxl.job.core.util.HttpClientUtil;
import org.eclipse.jetty.server.Request; import org.eclipse.jetty.server.Request;
import org.eclipse.jetty.server.handler.AbstractHandler; import org.eclipse.jetty.server.handler.AbstractHandler;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import javax.servlet.ServletException; import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletRequest;
@ -19,17 +21,13 @@ import java.io.OutputStream;
* @author xuxueli 2015-11-19 22:32:36 * @author xuxueli 2015-11-19 22:32:36
*/ */
public class JettyServerHandler extends AbstractHandler { public class JettyServerHandler extends AbstractHandler {
private static Logger logger = LoggerFactory.getLogger(JettyServerHandler.class);
@Override @Override
public void handle(String target, Request baseRequest, HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException { public void handle(String target, Request baseRequest, HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException {
// deserialize request
byte[] requestBytes = HttpClientUtil.readBytes(request);
RpcRequest rpcRequest = (RpcRequest) HessianSerializer.deserialize(requestBytes, RpcRequest.class);
// invoke // invoke
RpcResponse rpcResponse = NetComServerFactory.invokeService(rpcRequest, null); RpcResponse rpcResponse = doInvoke(request);
// serialize response // serialize response
byte[] responseBytes = HessianSerializer.serialize(rpcResponse); byte[] responseBytes = HessianSerializer.serialize(rpcResponse);
@ -44,4 +42,27 @@ public class JettyServerHandler extends AbstractHandler {
} }
private RpcResponse doInvoke(HttpServletRequest request) {
try {
// deserialize request
byte[] requestBytes = HttpClientUtil.readBytes(request);
if (requestBytes == null || requestBytes.length==0) {
RpcResponse rpcResponse = new RpcResponse();
rpcResponse.setError("RpcRequest byte[] is null");
return rpcResponse;
}
RpcRequest rpcRequest = (RpcRequest) HessianSerializer.deserialize(requestBytes, RpcRequest.class);
// invoke
RpcResponse rpcResponse = NetComServerFactory.invokeService(rpcRequest, null);
return rpcResponse;
} catch (Exception e) {
logger.error(e.getMessage(), e);
RpcResponse rpcResponse = new RpcResponse();
rpcResponse.setError("Servet-error:" + e.getMessage());
return rpcResponse;
}
}
} }

@ -1,7 +1,5 @@
package com.xxl.job.core.util; package com.xxl.job.core.util;
import com.xxl.job.core.rpc.codec.RpcResponse;
import com.xxl.job.core.rpc.serialize.HessianSerializer;
import org.apache.http.HttpEntity; import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse; import org.apache.http.HttpResponse;
import org.apache.http.client.methods.HttpPost; import org.apache.http.client.methods.HttpPost;
@ -27,7 +25,7 @@ public class HttpClientUtil {
/** /**
* post request * post request
*/ */
public static byte[] postRequest(String reqURL, byte[] date) { public static byte[] postRequest(String reqURL, byte[] date) throws Exception {
byte[] responseBytes = null; byte[] responseBytes = null;
HttpPost httpPost = new HttpPost(reqURL); HttpPost httpPost = new HttpPost(reqURL);
@ -53,10 +51,7 @@ public class HttpClientUtil {
} }
} catch (Exception e) { } catch (Exception e) {
logger.error("", e); logger.error("", e);
throw e;
RpcResponse rpcResponse = new RpcResponse();
rpcResponse.setError(e.getMessage());
responseBytes = HessianSerializer.serialize(rpcResponse);
} finally { } finally {
httpPost.releaseConnection(); httpPost.releaseConnection();
try { try {
@ -93,6 +88,7 @@ public class HttpClientUtil {
return message; return message;
} catch (IOException e) { } catch (IOException e) {
e.printStackTrace(); e.printStackTrace();
throw e;
} }
} }
return new byte[] {}; return new byte[] {};

Loading…
Cancel
Save