提交 de15a85c 编写于 作者: E eoLinker API Management

V2.0.2

上级 dcc0db4f
......@@ -73,28 +73,38 @@ GoKu API Gateway CE,支持OpenAPI与微服务管理,支持私有云部署,
## 更新日志
#### V1.0.0(2018/4/17)
新增
#### V2.0.2(2018/5/7)
修复
1. “网关概况”新增监控信息,方便监控API运行状况,包括:请求总数、成功请求数、失败请求数、每分钟实时访问次数等;
2. “权限控制”新增策略组,每个策略组下包括鉴权方式、IP黑白名单、流量控制三大模块;
3. 强化鉴权方式,包括Basic Auth、API Key、无认证;
4. 强化流量控制,支持允许访问时间段与禁止访问时间段;
5. 强化流量控制,支持设置每秒最大访问次数、每分钟最大访问次数、每小时最大访问次数、每天最大访问次数。
1、修复请求路径带参数时,匹配路径失败;
2、修复proxy_method配置必须大写的问题,现支持不区分大小写。
#### V2.0.1(2018/5/4)
优化:
1. 全面优化界面;
2. 优化访问性能。
1. 优化网关的错误提示。
其他:
1. 加入开源声明。
修复:
#### V1.0.1(2018/4/17)
1. 修复访问网关根路径时,报越界错误。
#### V2.0.0(2018/5/4)
新增:
1. 通过配置文件修改网关配置;
2. 新增全局IP黑白名单;
3. 参数新增支持json类型。
优化:
1. 架构优化,减少第三方依赖,提升网关性能;
2. 弃置mysql、redis数据库的使用,改用配置文件方式读取文件配置。
#### V1.0.3(2018/4/20)
修复:
1. 某个脚本的编码错误
1. 修复“鉴权方式”编辑页错位问题
#### V1.0.2(2018/4/19)
新增:
......@@ -107,29 +117,25 @@ GoKu API Gateway CE,支持OpenAPI与微服务管理,支持私有云部署,
2. 修复mysql5.7环境下,sql脚本执行失败;
3. 修复访问网关后端服务时,请求提示错误的问题。
#### V1.0.3(2018/4/20
#### V1.0.1(2018/4/17
修复:
1. 修复“鉴权方式”编辑页错位问题
1. 某个脚本的编码错误
#### V2.0.0(2018/5/4)
#### V1.0.0(2018/4/17)
新增:
1. 通过配置文件修改网关配置;
2. 新增全局IP黑白名单;
3. 参数新增支持json类型。
优化:
1. 架构优化,减少第三方依赖,提升网关性能;
2. 弃置mysql、redis数据库的使用,改用配置文件方式读取文件配置。
1. “网关概况”新增监控信息,方便监控API运行状况,包括:请求总数、成功请求数、失败请求数、每分钟实时访问次数等;
2. “权限控制”新增策略组,每个策略组下包括鉴权方式、IP黑白名单、流量控制三大模块;
3. 强化鉴权方式,包括Basic Auth、API Key、无认证;
4. 强化流量控制,支持允许访问时间段与禁止访问时间段;
5. 强化流量控制,支持设置每秒最大访问次数、每分钟最大访问次数、每小时最大访问次数、每天最大访问次数。
#### V2.0.1(2018/5/4)
优化:
1. 优化网关的错误提示。
1. 全面优化界面;
2. 优化访问性能。
修复
其他
1. 修复访问网关根路径时,报越界错误。
\ No newline at end of file
1. 加入开源声明。
package middleware
import (
"fmt"
"net/http"
"strings"
"goku-ce/goku"
......@@ -9,7 +10,7 @@ import (
)
func Mapping(g *goku.Goku,res http.ResponseWriter, req *http.Request) (bool,string){
url := req.RequestURI
url := InterceptURL(req.RequestURI,"?")
requestURI := strings.Split(url,"/")
if len(requestURI) == 2 {
if requestURI[1] == "" {
......@@ -22,6 +23,7 @@ func Mapping(g *goku.Goku,res http.ResponseWriter, req *http.Request) (bool,stri
return false,"Lack StrategyID"
}
}
fmt.Println(url)
gatewayAlias := requestURI[1]
StrategyID := requestURI[2]
urlLen := len(gatewayAlias) + len(StrategyID) + 2
......@@ -30,28 +32,28 @@ func Mapping(g *goku.Goku,res http.ResponseWriter, req *http.Request) (bool,stri
if m.GatewayAlias == gatewayAlias{
for _,i := range m.StrategyList.Strategy{
if i.StrategyID == StrategyID{
flag = true
f,r := IPLimit(m,i,res,req)
if !f {
res.Write([]byte(r))
return false,r
}
flag = true
f,r := IPLimit(m,i,res,req)
if !f {
res.Write([]byte(r))
return false,r
}
f,r = Auth(i,res,req)
if !f {
res.Write([]byte(r))
return false,r
}
f,r = Auth(i,res,req)
if !f {
res.Write([]byte(r))
return false,r
}
f,r = RateLimit(g,i)
if !f {
res.Write([]byte(r))
return false,r
}
break
f,r = RateLimit(g,i)
if !f {
res.Write([]byte(r))
return false,r
}
break
}
}
}
}
if flag {
for _,i := range m.ApiList.Apis{
if i.RequestURL == url[urlLen:]{
......@@ -109,9 +111,9 @@ func CreateRequest(api conf.ApiInfo,i conf.BackendInfo,httpRequest *http.Request
return 500,[]byte("Fail to Parse Args"),make(map[string][]string)
}
backendMethod := api.ProxyMethod
backendMethod := strings.ToUpper(api.ProxyMethod)
backenDomain := i.BackendPath + api.ProxyURL
requ,err := request.Method(strings.ToUpper(backendMethod),backenDomain)
requ,err := request.Method(backendMethod,backenDomain)
for _, reqParam := range api.ProxyParams {
var param []string
switch reqParam.KeyPosition {
......@@ -124,7 +126,7 @@ func CreateRequest(api conf.ApiInfo,i conf.BackendInfo,httpRequest *http.Request
continue
}
case "query":
param = httpRequest.Form[reqParam.Key]
param = httpRequest.Form[reqParam.Key]
}
if param == nil {
if reqParam.NotEmpty {
......@@ -166,11 +168,15 @@ func CreateRequest(api conf.ApiInfo,i conf.BackendInfo,httpRequest *http.Request
for key, values := range backendHeaders {
requ.SetHeader(key, values...)
}
}
for key, values := range backendQueryParams {
fmt.Println(key)
fmt.Println(values)
requ.SetQueryParam(key, values...)
}
for key, values := range backendFormParams {
fmt.Println(key)
fmt.Println(values)
requ.SetFormParam(key, values...)
}
if api.ProxyBodyType == "raw" {
......@@ -201,3 +207,14 @@ func CreateRequest(api conf.ApiInfo,i conf.BackendInfo,httpRequest *http.Request
return res.StatusCode(), res.Body(),httpResponseHeader
}
func InterceptURL(str, substr string) string {
result := strings.Index(str, substr)
var rs string
if result != -1{
rs = str[:result]
}else {
rs = str
}
return rs
}
\ No newline at end of file
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册