Commit 44c4aab2 authored by david.zhong's avatar david.zhong

补单,写死的配置写到配置文件中优化

parent f361fafd
package com.ost.micro.config;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.annotation.Configuration;
import org.springframework.stereotype.Component;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
@Component
@ConfigurationProperties(prefix = "url-filter")
public class CustomFilterConfig {
private String name;
private String[] urlExclude;
private String[] domains;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String[] getUrlExclude() {
return urlExclude;
}
public void setUrlExclude(String[] urlExclude) {
this.urlExclude = urlExclude;
}
public String[] getDomains() {
return domains;
}
public void setDomains(String[] domains) {
this.domains = domains;
}
public class DomainApiInfo{
private String domain;
private String uri;
private String service;
public String getDomain() {
return domain;
}
public void setDomain(String domain) {
this.domain = domain;
}
public String getUri() {
return uri;
}
public void setUri(String uri) {
this.uri = uri;
}
public String getService() {
return service;
}
public void setService(String service) {
this.service = service;
}
}
}
......@@ -3,15 +3,26 @@ package com.ost.micro.filter;
import com.netflix.zuul.ZuulFilter;
import com.netflix.zuul.context.RequestContext;
import com.netflix.zuul.exception.ZuulException;
import com.ost.micro.config.CustomFilterConfig;
import com.ost.micro.core.utils.ObjectMapUtils;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.collections.CollectionUtils;
import org.apache.commons.lang.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.cloud.netflix.zuul.filters.support.FilterConstants;
import org.springframework.stereotype.Component;
import javax.servlet.http.HttpServletRequest;
import java.util.List;
import java.util.Map;
@Slf4j
@Component
public class UrlFilter extends ZuulFilter {
@Autowired
private CustomFilterConfig customFilterConfig;
@Override
public String filterType() {
return FilterConstants.PRE_TYPE ;
......@@ -26,13 +37,17 @@ public class UrlFilter extends ZuulFilter {
public boolean shouldFilter() {
RequestContext ctx = RequestContext.getCurrentContext();
HttpServletRequest request = ctx.getRequest();
//String url = request.getScheme()+"://"+request.getServerName()+request.getRequestURI();
String url = request.getRequestURL().toString();
if (url.contains("login") || url.contains("logout") || url.contains("captcha") || url.contains("webjars") || url.contains("druid")
|| url.contains("swagger") || url.contains("/v2/api-docs") || url.contains("swagger-ui.html") || url.contains("/swagger-resources")
|| url.contains("service") || url.contains("editor-app") || url.contains("/diagram-viewer") || url.contains("modeler.html")
|| url.contains("favicon.ico") || url.contains("sys") || url.contains("actuator")) {
return false;
if (null != customFilterConfig) {
String[] urlExclude = customFilterConfig.getUrlExclude();
if (urlExclude.length > 0) {
for (int i=0 ;i<urlExclude.length ;i++) {
if (url.contains(urlExclude[i])){
ctx.put(FilterConstants.REQUEST_URI_KEY, request.getRequestURI());
return false;
}
}
}
}
return true;
}
......@@ -45,16 +60,23 @@ public class UrlFilter extends ZuulFilter {
String originalRequestPath = request.getRequestURI().toString();
String url = request.getScheme()+"://"+request.getServerName();
log.info("request url is {}",url);
if (url.contains("backstage")) {
String modifiedRequestPath = "/api" + originalRequestPath;
log.info("modifiedRequestPath is {}",modifiedRequestPath);
ctx.put(FilterConstants.REQUEST_URI_KEY, modifiedRequestPath);
ctx.set(FilterConstants.SERVICE_ID_KEY,"micro-project-as-pay-operation");
}else if (url.contains("backmch")) {
String modifiedRequestPath = "/mch" + originalRequestPath;
log.info("modifiedRequestPath is {}",modifiedRequestPath);
ctx.put(FilterConstants.REQUEST_URI_KEY, modifiedRequestPath);
ctx.set(FilterConstants.SERVICE_ID_KEY,"micro-project-as-pay-merchant");
String[] domainApis = customFilterConfig.getDomains();
if (domainApis.length > 0) {
for (int i=0;i<domainApis.length ; i++) {
String itemInfo = domainApis[i];
if (StringUtils.isNotEmpty(itemInfo)) {
String[] info = itemInfo.split(":");
String domain = info[0];
String serviceRote = info[1];
String serviceId = info[2];
if (url.contains(domain)) {
String modifiedRequestPath = "/"+serviceRote + originalRequestPath;
log.info("modifiedRequestPath is {}",modifiedRequestPath);
ctx.put(FilterConstants.REQUEST_URI_KEY, modifiedRequestPath);
ctx.set(FilterConstants.SERVICE_ID_KEY,serviceId);
}
}
}
}
return null;
}
......
......@@ -2,6 +2,8 @@ spring:
datasource:
druid:
url: jdbc:mysql://172.30.10.177:3306/micro_security?useUnicode=true&characterEncoding=UTF-8&useSSL=false
username: root
password: 123456
redis:
host: 127.0.0.1
......
......@@ -2,3 +2,5 @@ spring:
datasource:
druid:
url: jdbc:mysql://172.30.10.127:3306/micro_security?useUnicode=true&characterEncoding=UTF-8&useSSL=false
username: root
password: 123456
......@@ -61,7 +61,7 @@ zuul:
payfake:
path: /pay/searchorder/**
serviceId: micro-project-scheduler-pay-fake
stripPrefix: true
stripPrefix: false
login:
path: /login/**
url: forward:/login
......@@ -76,4 +76,11 @@ zuul:
url: forward:/sys
all:
path: /**
serviceId: micro-project-as-pay-operation
\ No newline at end of file
serviceId: micro-project-as-pay-operation
#自定义url-zuul过滤条件, 对请求进行筛选是否进入过滤器
url-filter:
name: com.ost.micro.filter.UrlFilter
# url 中包含如下关键字这不会进入过滤器
urlExclude: login,logout,captcha,webjars,druid,swagger,/v2/api-docs,swagger-ui.html,swagger-resources,service,editor-app,diagram-viewer,modeler.html,favicon.ico,sys,actuator,searchorder
# 根据域名分发到下游服务
domains: backstage:api:micro-project-as-pay-operation,backmch:mch:micro-project-as-pay-merchant
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment