Reference : Echo Doc
각 Middleware 의 세부적인 내용은 개별의 포스팅에서 다룰 것이다.
- 3 Levels
- Group Level
- Before Router
- HTTPSRedirect
- HTTPSWWWRedirect
- WWWRedirect
- NonWWWRedirect
- AddTrailingRedirect
- AddTrailingSlash
- RemoveTrailingSlash
- MethodOverride
- Rewrite
- After Router
- BodyLimit
- Logger
- GZip
- Recover
- BasicAuth
- JWTAuth
- Secure
- CORS
- Static
- Before Router
- Root Level
- Route Level
- Group Level
- Skipping Middleware
에코에서 제공하는 미들웨어를 세 가지 레벨로 나눌 수 있다.
- Group Level
- Root Level
- Route Level
새 그룹을 생성하여 특정 그룹에게만 middleware 가 적용되게 설정.
e := echo.New()
admin = e.Group("/admin", middleware.BasicAuth())
Root 레벨은 Router 가 '실행되기 이전'과 '실행된 후' 라는 두 그룹으로 나뉜다.
- Before Router
- After Router
이 레벨에서 미들웨어를 등록할 시에는 Pre()
함수를 사용한다.
// E.g.
import "github.com/labstack/echo/middleware"
e := echo.New()
e.Pre(middleware.HTTPSRedirect())
-
HTTPSRedirect
http 요청을 https 로 리다이렉트http://github.com/8luebottle
↓ ↓ ↓ ↓ ↓ ↓ ↓ Redirect ↓ ↓ ↓ ↓ ↓ ↓ ↓
https://github.com/8luebottle
// E.g. e := echo.New() e.Pre(middleware.HTTPSRedirect())
-
HTTPSWWWRedirect
http 요청을 www https 로 리다이렉트.http://github.com/8luebottle
↓ ↓ ↓ ↓ ↓ ↓ ↓ Redirect ↓ ↓ ↓ ↓ ↓ ↓ ↓
https://www.github.com/8luebottle
// E.g. e := echo.New() e.Pre(middleware.HTTPSWWWRedirect())
-
WWWRedirect
받은 요청을 http www 로 리다이렉트.http://github.com/8luebottle
↓ ↓ ↓ ↓ ↓ ↓ ↓ Redirect ↓ ↓ ↓ ↓ ↓ ↓ ↓
http://www.github.com/8luebottle
// E.g. e := echo.New() e.Pre(middleware.WWWRedirect())
-
NonWWWRedirect
받은 요청을 https 로 리다이렉트. (w/o www)http://www.github.com/8luebottle
↓ ↓ ↓ ↓ ↓ ↓ ↓ Redirect ↓ ↓ ↓ ↓ ↓ ↓ ↓
https://github.com/8luebottle
// E.g. e := echo.New() e.Pre(middleware.NonWWWRedirect())
-
AddTrailingRedirect
-
AddTrailingSlash
-
RemoveTrailingSlash
-
MethodOverride
-
Rewrite
이 레벨에서 미들웨어를 등록할 시에는 대부분의 경우 Use()
함수를 사용한다.
이곳에서 등록된 미들웨어는 라우터 이후(after)에 실행되게 된다.
// E.g.
import "github.com/labstack/echo/middleware"
e := echo.New()
e.Use(middleware.Logger())
e.Use(middleware.Recover())
이 레벨단의 내장되어 있는 미들웨어는 아래와 같다.
- BodyLimit
- Logger
- GZip
- Recover
- BasicAuth
- JWTAuth
- Secure
- CORS
- Static
새 Route 를 정의함을 통해 미들웨어를 특정 핸들러에게만 적용시킬 수 있다.
e := echo.New()
e.GET("/", <HandlerA>, <MiddlewareB>)
HandlerA
에게만MiddlewareB
적용시키기
특정 조건에 해당될 때 미들웨어를 사용하지 않고 스킵하도록 설정 할 수 있다.
- 스킵시에는
Skipper
함수를 사용.Default 값은 false 로 설정되어 있다. true 일 시 Processing 되고 있는 미들웨어를 skip.Skipper func(echo.Context) bool
// E.g.
e := echo.New()
e.User(middleware.LoggerWithConfig(middleware.LoggerConfig{
Skipper: func(c echo.Context) bool {
if strings.HasPrefix(c.Request().Host, “localhost”){
return true
}
return false
},
}))