Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
A
apaas-meshproxy
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Analytics
Analytics
CI / CD
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
gzga-jzapi
apaas-meshproxy
Commits
5182fa86
Commit
5182fa86
authored
May 08, 2020
by
张宇迪
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
服务调用(未实计次入库)
parent
12e60eb4
Changes
2
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
49 additions
and
26 deletions
+49
-26
src/handler/proxyhandler.go
src/handler/proxyhandler.go
+31
-15
src/service/field.go
src/service/field.go
+18
-11
No files found.
src/handler/proxyhandler.go
View file @
5182fa86
...
...
@@ -17,58 +17,74 @@ var Resp *http.Response
func
Proxy
(
c
*
gin
.
Context
)
{
appId
:=
c
.
Param
(
"appId"
)
// TODO 根据appId 获取真实地址
proxyData
,
err
:=
service
.
GetRealPath
(
appId
)
if
err
!=
nil
{
c
.
Error
(
err
)
return
}
f
,
_
:=
forward
.
New
(
forward
.
PassHostHeader
(
true
),
forward
.
ResponseModifier
(
func
(
resp
*
http
.
Response
)
error
{
Resp
=
resp
// 判断调用是否到达上限
callflag
,
sensitiveflag
,
err
:=
service
.
QueryCallsCount
(
appId
,
proxyData
)
if
err
!=
nil
{
Return
(
err
.
Error
())
return
nil
}
if
callflag
==
false
{
Return
(
`调用达到当日限定次数`
)
return
nil
}
respbody
,
_
:=
ioutil
.
ReadAll
(
resp
.
Body
)
//筛选字段
model
:=
make
(
map
[
string
]
interface
{})
realData
:=
make
(
map
[
string
]
interface
{})
json
.
Unmarshal
([]
byte
(
proxyData
.
ResFields
),
&
model
)
json
.
Unmarshal
(
respbody
,
&
realData
)
res
:=
service
.
Change
(
model
,
realData
)
if
err
!=
nil
{
Return
(
err
.
Error
())
return
nil
var
res
interface
{}
res
=
respbody
if
proxyData
.
ResFields
!=
""
{
res
=
service
.
FiledFilter
(
proxyData
,
respbody
)
}
// TODO 筛选过滤敏感字段
if
sensitiveflag
==
false
{
Sensituve_word
:=
make
(
map
[
string
]
interface
{})
json
.
Unmarshal
([]
byte
(
proxyData
.
Sensituve_word
),
&
Sensituve_word
)
res
=
service
.
FilterSensituveField
(
Sensituve_word
,
res
)
res
=
service
.
SensitiveFilter
(
proxyData
,
res
)
}
Return
(
res
)
return
nil
}))
c
.
Request
.
URL
=
testutils
.
ParseURI
(
proxyData
.
RealUrl
)
c
.
Request
.
RequestURI
=
proxyData
.
RealUrl
c
.
Request
.
Host
=
getHost
(
proxyData
.
RealUrl
)
f
.
ServeHTTP
(
c
.
Writer
,
c
.
Request
)
}
func
Return
(
res
interface
{})
{
var
b
[]
byte
switch
res
.
(
type
)
{
case
[]
byte
:
b
=
res
.
([]
byte
)
case
interface
{}
:
b
,
_
=
json
.
Marshal
(
res
)
}
Resp
.
Header
.
Set
(
"X-Log-By"
,
"Apaas"
)
l
:=
strconv
.
Itoa
(
len
(
b
))
Resp
.
Header
.
Set
(
"Content-Length"
,
l
)
Resp
.
Body
=
ioutil
.
NopCloser
(
bytes
.
NewBuffer
(
b
))
}
...
...
src/service/field.go
View file @
5182fa86
...
...
@@ -8,6 +8,7 @@
package
service
import
(
"encoding/json"
"errors"
"fmt"
"gitlab.wodcloud.com/apaas/apaas-meshproxy/src/client"
...
...
@@ -54,7 +55,7 @@ func QueryCallsCount(applyId string, filter model.ProxyData) (call bool, sensiti
return
}
//超过允许访问敏感字段次数
if
count
+
1
>
filter
.
Sensitive_count
{
if
count
+
1
>
filter
.
Sensitive_count
&&
filter
.
Sensituve_word
!=
""
{
sensitiveCall
=
false
}
expire
:=
GetExpire
()
...
...
@@ -76,6 +77,15 @@ func GetExpire() time.Duration {
return
subMin
}
//过滤返回字段
func
FiledFilter
(
proxyData
model
.
ProxyData
,
respbody
[]
byte
)
interface
{}
{
model
:=
make
(
map
[
string
]
interface
{})
realData
:=
make
(
map
[
string
]
interface
{})
json
.
Unmarshal
([]
byte
(
proxyData
.
ResFields
),
&
model
)
json
.
Unmarshal
(
respbody
,
&
realData
)
return
Change
(
model
,
realData
)
}
//返回申请字段
func
Change
(
model
interface
{},
returnData
interface
{})
interface
{}
{
switch
t
:=
model
.
(
type
)
{
...
...
@@ -148,6 +158,13 @@ func UpdateCallsCount(applyId string) (err error) {
return
}
//返回过滤后的敏感字段
func
SensitiveFilter
(
proxyData
model
.
ProxyData
,
res
interface
{})
interface
{}
{
Sensituve_word
:=
make
(
map
[
string
]
interface
{})
json
.
Unmarshal
([]
byte
(
proxyData
.
Sensituve_word
),
&
Sensituve_word
)
return
FilterSensituveField
(
Sensituve_word
,
res
)
}
// 过滤敏感字段
func
FilterSensituveField
(
model
interface
{},
returnData
interface
{})
(
body
interface
{})
{
switch
t
:=
model
.
(
type
)
{
...
...
@@ -165,11 +182,6 @@ func FilterSensituveField(model interface{}, returnData interface{}) (body inter
FilterSensituveField
(
v
,
v1
)
}
}
// 删除属性
//if !flag {
// fmt.Println("删除属性:", k)
// delete(returnData.(map[string]interface{}), k)
//}
}
break
case
[]
interface
{}
:
...
...
@@ -189,11 +201,6 @@ func FilterSensituveField(model interface{}, returnData interface{}) (body inter
FilterSensituveField
(
v1
,
v2
)
}
}
// 删除属性
//if !flag {
// fmt.Println("删除属性:", k)
// delete(v.(map[string]interface{}), k1)
//}
}
}
break
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment