1
0
mirror of https://github.com/astaxie/beego.git synced 2025-06-12 19:30:39 +00:00
This commit is contained in:
Ming Deng
2020-09-06 15:21:07 +08:00
parent 5b3dd7e50f
commit 3acda41bc7
12 changed files with 41 additions and 551 deletions

View File

@ -492,15 +492,15 @@ func Handler(rootpath string, h http.Handler, options ...interface{}) *App {
// The pos means action constant including
// beego.BeforeStatic, beego.BeforeRouter, beego.BeforeExec, beego.AfterExec and beego.FinishRouter.
// The bool params is for setting the returnOnOutput value (false allows multiple filters to execute)
func InsertFilter(pattern string, pos int, filter FilterFunc, params ...bool) *App {
BeeApp.Handlers.InsertFilter(pattern, pos, filter, params...)
func InsertFilter(pattern string, pos int, filter FilterFunc, opts ...FilterOpt) *App {
BeeApp.Handlers.InsertFilter(pattern, pos, filter, opts...)
return BeeApp
}
// InsertFilterChain adds a FilterFunc built by filterChain.
// This filter will be executed before all filters.
// the filter's behavior is like stack
func InsertFilterChain(pattern string, filterChain FilterChain, params ...bool) *App {
BeeApp.Handlers.InsertFilterChain(pattern, filterChain, params...)
func InsertFilterChain(pattern string, filterChain FilterChain, opts ...FilterOpt) *App {
BeeApp.Handlers.InsertFilterChain(pattern, filterChain, opts...)
return BeeApp
}

View File

@ -45,13 +45,14 @@ type FilterRouter struct {
// 2. determining whether or not params need to be reset.
func newFilterRouter(pattern string, filter FilterFunc, opts ...FilterOpt) *FilterRouter {
mr := &FilterRouter{
tree: NewTree(),
pattern: pattern,
filterFunc: filter,
returnOnOutput: true,
tree: NewTree(),
pattern: pattern,
filterFunc: filter,
}
fos := &filterOpts{}
fos := &filterOpts{
returnOnOutput: true,
}
for _, o := range opts {
o(fos)

View File

@ -91,7 +91,7 @@ func (n *Namespace) Filter(action string, filter ...FilterFunc) *Namespace {
a = FinishRouter
}
for _, f := range filter {
n.handlers.InsertFilter("*", a, f)
n.handlers.InsertFilter("*", a, f, WithReturnOnOutput(true))
}
return n
}

View File

@ -423,7 +423,7 @@ func TestInsertFilter(t *testing.T) {
testName := "TestInsertFilter"
mux := NewControllerRegister()
mux.InsertFilter("*", BeforeRouter, func(*context.Context) {})
mux.InsertFilter("*", BeforeRouter, func(*context.Context) {}, WithReturnOnOutput(true))
if !mux.filters[BeforeRouter][0].returnOnOutput {
t.Errorf(
"%s: passing no variadic params should set returnOnOutput to true",
@ -436,7 +436,7 @@ func TestInsertFilter(t *testing.T) {
}
mux = NewControllerRegister()
mux.InsertFilter("*", BeforeRouter, func(*context.Context) {}, false)
mux.InsertFilter("*", BeforeRouter, func(*context.Context) {}, WithReturnOnOutput(false))
if mux.filters[BeforeRouter][0].returnOnOutput {
t.Errorf(
"%s: passing false as 1st variadic param should set returnOnOutput to false",
@ -444,7 +444,7 @@ func TestInsertFilter(t *testing.T) {
}
mux = NewControllerRegister()
mux.InsertFilter("*", BeforeRouter, func(*context.Context) {}, true, true)
mux.InsertFilter("*", BeforeRouter, func(*context.Context) {}, WithReturnOnOutput(true), WithResetParams(true))
if !mux.filters[BeforeRouter][0].resetParams {
t.Errorf(
"%s: passing true as 2nd variadic param should set resetParams to true",
@ -461,7 +461,7 @@ func TestParamResetFilter(t *testing.T) {
mux := NewControllerRegister()
mux.InsertFilter("*", BeforeExec, beegoResetParams, true, true)
mux.InsertFilter("*", BeforeExec, beegoResetParams, WithReturnOnOutput(true), WithResetParams(true))
mux.Get(route, beegoHandleResetParams)
@ -514,8 +514,8 @@ func TestFilterBeforeExec(t *testing.T) {
url := "/beforeExec"
mux := NewControllerRegister()
mux.InsertFilter(url, BeforeRouter, beegoFilterNoOutput)
mux.InsertFilter(url, BeforeExec, beegoBeforeExec1)
mux.InsertFilter(url, BeforeRouter, beegoFilterNoOutput, WithReturnOnOutput(true))
mux.InsertFilter(url, BeforeExec, beegoBeforeExec1, WithReturnOnOutput(true))
mux.Get(url, beegoFilterFunc)
@ -542,7 +542,7 @@ func TestFilterAfterExec(t *testing.T) {
mux := NewControllerRegister()
mux.InsertFilter(url, BeforeRouter, beegoFilterNoOutput)
mux.InsertFilter(url, BeforeExec, beegoFilterNoOutput)
mux.InsertFilter(url, AfterExec, beegoAfterExec1, false)
mux.InsertFilter(url, AfterExec, beegoAfterExec1, WithReturnOnOutput(false))
mux.Get(url, beegoFilterFunc)
@ -570,10 +570,10 @@ func TestFilterFinishRouter(t *testing.T) {
url := "/finishRouter"
mux := NewControllerRegister()
mux.InsertFilter(url, BeforeRouter, beegoFilterNoOutput)
mux.InsertFilter(url, BeforeExec, beegoFilterNoOutput)
mux.InsertFilter(url, AfterExec, beegoFilterNoOutput)
mux.InsertFilter(url, FinishRouter, beegoFinishRouter1)
mux.InsertFilter(url, BeforeRouter, beegoFilterNoOutput, WithReturnOnOutput(true))
mux.InsertFilter(url, BeforeExec, beegoFilterNoOutput, WithReturnOnOutput(true))
mux.InsertFilter(url, AfterExec, beegoFilterNoOutput, WithReturnOnOutput(true))
mux.InsertFilter(url, FinishRouter, beegoFinishRouter1, WithReturnOnOutput(true))
mux.Get(url, beegoFilterFunc)
@ -604,7 +604,7 @@ func TestFilterFinishRouterMultiFirstOnly(t *testing.T) {
url := "/finishRouterMultiFirstOnly"
mux := NewControllerRegister()
mux.InsertFilter(url, FinishRouter, beegoFinishRouter1, false)
mux.InsertFilter(url, FinishRouter, beegoFinishRouter1, WithReturnOnOutput(false))
mux.InsertFilter(url, FinishRouter, beegoFinishRouter2)
mux.Get(url, beegoFilterFunc)
@ -631,8 +631,8 @@ func TestFilterFinishRouterMulti(t *testing.T) {
url := "/finishRouterMulti"
mux := NewControllerRegister()
mux.InsertFilter(url, FinishRouter, beegoFinishRouter1, false)
mux.InsertFilter(url, FinishRouter, beegoFinishRouter2, false)
mux.InsertFilter(url, FinishRouter, beegoFinishRouter1, WithReturnOnOutput(false))
mux.InsertFilter(url, FinishRouter, beegoFinishRouter2, WithReturnOnOutput(false))
mux.Get(url, beegoFilterFunc)