Filter/Middleware¶
HTTP request filtering for cross-cutting concerns.
Define Filter¶
type AuthFilter struct {
core.IFilter
}
func (f *AuthFilter) Init(ctx *core.Context) error {
return nil
}
func (f *AuthFilter) Handle(fc web.FilterChain, req *web.Request) (any, error) {
// Pre-processing
token := req.GetHeader("Authorization")
if token == "" {
return nil, errors.New("unauthorized")
}
// Call next handler
result, err := fc.Next()
// Post-processing (optional)
return result, err
}
Register Filter¶
Route Metadata (WithMeta)¶
Declare metadata per route:
func RequireAuth() web.MetaOption {
return web.WithValue("require_auth", true)
}
builder.Get("/profile", handler).WithMeta(RequireAuth())
Read metadata in filter:
func (f *AuthFilter) Handle(fc web.FilterChain, req *web.Request) (any, error) {
if req.HasMeta(RequireAuth()) {
// check auth
}
return fc.Next()
}
Built-in Filters¶
| Filter | Description |
|---|---|
cors.Filter |
CORS support |
rate_limit.Filter |
Rate limiting |