This repository provides a way to share community-based middlewares for Iris v12.2.0+ (currently master
branch). Among with those, you can also navigate through the builtin Iris handlers.
Install a middleware, take for example the jwt one.
$ go env -w GOPROXY=goproxy.cn,gocenter.io,goproxy.io,direct
$ go mod init myapp
$ go get github.com/kataras/iris/v12@master
$ go get github.com/iris-contrib/middleware/jwt@master
import as
import "github.com/iris-contrib/middleware/jwt"
// [...Code]
build
$ go build
Middleware is just a chain handlers which can be executed before or after the main handler, can transfer data between handlers and communicate with third-party libraries, they are just functions.
Middleware | Description | Example |
---|---|---|
jwt | JSON Web Tokens | jwt |
cors | HTTP Access Control. | cors/_example |
secure | Middleware that implements a few quick security wins | secure/_example |
tollbooth | Generic middleware to rate-limit HTTP requests | tollboothic/_examples/limit-handler |
cloudwatch | AWS cloudwatch metrics middleware | cloudwatch/_example |
newrelic/v3 | Official New Relic Go Agent | newrelic/_example |
prometheus | Easily create metrics endpoint for the prometheus instrumentation tool | prometheus/_example |
casbin | An authorization library that supports access control models like ACL, RBAC, ABAC | casbin/_examples |
sentry-go (ex. raven) | Sentry client in Go | sentry-go/example/iris |
csrf | Cross-Site Request Forgery Protection | csrf/_example |
throttler | Rate limiting access to HTTP endpoints | throttler/_example |
To a single route
app := iris.New()
app.Get("/mypath",
onBegin,
mySecondMiddleware,
mainHandler,
)
func onBegin(ctx iris.Context) { /* ... */ ctx.Next() }
func mySecondMiddleware(ctx iris.Context) { /* ... */ ctx.Next() }
func mainHandler(ctx iris.Context) { /* ... */ }
To a party of routes or subdomain
p := app.Party("/sellers", authMiddleware, logMiddleware)
OR
p := app.Party("/customers")
p.Use(logMiddleware)
To all routes
app.Use(func(ctx iris.Context) { }, myMiddleware2)
To global, all registered routes (including the http errors)
app.UseGlobal(func(ctx iris.Context) { }, myMiddleware2)
To Party and its children, even on unmatched routes and errors
app.UseRouter(func(ctx iris.Context) { }, myMiddleware2))
Yes you can, just pass the Handler inside the iris.FromStd
in order to be converted into iris.Handler and register it as you saw before.
package main
import (
"github.com/kataras/iris/v12"
)
func main() {
app := iris.New()
sillyHTTPHandler := http.HandlerFunc(func(w http.ResponseWriter, r *http.Request){
println(r.RequestURI)
})
sillyConvertedToIon := iris.FromStd(sillyHTTPHandler)
// FromStd can take (http.ResponseWriter, *http.Request, next http.Handler) too!
app.Use(sillyConvertedToIon)
app.Listen(":8080")
}
If you are interested in contributing to this project, please push a PR.