tanghc 5 years ago
parent 0c7b1ae408
commit f3575a6add
  1. 2
      sop-common/sop-gateway-common/src/main/java/com/gitee/sop/gatewaycommon/bean/SopConstants.java
  2. 9
      sop-common/sop-gateway-common/src/main/java/com/gitee/sop/gatewaycommon/zuul/result/ZuulResultExecutor.java
  3. 27
      sop-gateway/src/main/java/com/gitee/sop/gateway/controller/RestServlet.java

@ -22,6 +22,8 @@ public class SopConstants {
public static final String REDIRECT_PATH_KEY = "r-path"; public static final String REDIRECT_PATH_KEY = "r-path";
public static final String SOP_NOT_MERGE = "sop.not-merge";
public static final String METADATA_SERVER_CONTEXT_PATH = "server.servlet.context-path"; public static final String METADATA_SERVER_CONTEXT_PATH = "server.servlet.context-path";
public static final String METADATA_SERVER_CONTEXT_PATH_COMPATIBILITY = "context-path"; public static final String METADATA_SERVER_CONTEXT_PATH_COMPATIBILITY = "context-path";

@ -22,6 +22,15 @@ import java.util.Map;
@Slf4j @Slf4j
public class ZuulResultExecutor extends BaseExecutorAdapter<RequestContext, String> { public class ZuulResultExecutor extends BaseExecutorAdapter<RequestContext, String> {
@Override
protected boolean isMergeResult(RequestContext request) {
Object notMerge = request.getRequest().getAttribute(SopConstants.SOP_NOT_MERGE);
if (notMerge != null) {
return false;
}
return super.isMergeResult(request);
}
@Override @Override
public int getResponseStatus(RequestContext requestContext) { public int getResponseStatus(RequestContext requestContext) {
List<Pair<String, String>> bizHeaders = requestContext.getZuulResponseHeaders(); List<Pair<String, String>> bizHeaders = requestContext.getZuulResponseHeaders();

@ -1,21 +1,19 @@
package com.gitee.sop.gateway.controller; package com.gitee.sop.gateway.controller;
import com.gitee.sop.gatewaycommon.bean.SopConstants; import com.gitee.sop.gatewaycommon.bean.SopConstants;
import com.gitee.sop.gatewaycommon.zuul.ValidateService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value; import org.springframework.beans.factory.annotation.Value;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet; import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
/** /**
* 传统web开发入口 * 传统web开发入口
* @author tanghc * @author tanghc
*/ */
@Slf4j
@WebServlet(urlPatterns = "/rest/*") @WebServlet(urlPatterns = "/rest/*")
public class RestServlet extends HttpServlet { public class RestServlet extends HttpServlet {
@ -27,34 +25,21 @@ public class RestServlet extends HttpServlet {
@Value("${sop.restful.path:/rest}") @Value("${sop.restful.path:/rest}")
private String restPath; private String restPath;
@Autowired
private ValidateService validateService;
/**
* 验证回调可自定义实现接口
*/
private ValidateService.ValidateCallback callback = (currentContext -> {
try {
currentContext.getRequest().getRequestDispatcher(path).forward(currentContext.getRequest(), currentContext.getResponse());
} catch (Exception e) {
log.error("请求转发异常", e);
}
});
@Override @Override
protected void doGet(HttpServletRequest request, HttpServletResponse response) { protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doPost(request, response); doPost(request, response);
} }
@Override @Override
protected void doPost(HttpServletRequest request, HttpServletResponse response) { protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
String url = request.getRequestURL().toString(); String url = request.getRequestURL().toString();
int index = url.indexOf(restPath); int index = url.indexOf(restPath);
// 取/rest的后面部分 // 取/rest的后面部分
String path = url.substring(index + restPath.length()); String path = url.substring(index + restPath.length());
request.setAttribute(SopConstants.REDIRECT_METHOD_KEY, path); request.setAttribute(SopConstants.REDIRECT_METHOD_KEY, path);
request.setAttribute(SopConstants.REDIRECT_VERSION_KEY, EMPTY_VERSION); request.setAttribute(SopConstants.REDIRECT_VERSION_KEY, EMPTY_VERSION);
validateService.validate(request, response, callback); request.setAttribute(SopConstants.SOP_NOT_MERGE, true);
request.getRequestDispatcher(this.path).forward(request, response);
} }
} }
Loading…
Cancel
Save