通讯协议二进制据增强校验,处理非正常请求;
This commit is contained in:
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 {
|
||||||
|
try {
|
||||||
|
// serialize request
|
||||||
byte[] requestBytes = HessianSerializer.serialize(request);
|
byte[] requestBytes = HessianSerializer.serialize(request);
|
||||||
|
|
||||||
|
// remote invoke
|
||||||
byte[] responseBytes = HttpClientUtil.postRequest("http://" + request.getServerAddress() + "/", requestBytes);
|
byte[] responseBytes = HttpClientUtil.postRequest("http://" + request.getServerAddress() + "/", requestBytes);
|
||||||
return (RpcResponse) HessianSerializer.deserialize(responseBytes, RpcResponse.class);
|
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…
Reference in New Issue