This repository provides a way to share community-based middlewares for Iris Web Framework. 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@main
$ go get github.com/iris-contrib/middleware/jwt@masterimport as
import "github.com/iris-contrib/middleware/jwt"
// [...Code]build
$ go buildMiddleware 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 | 
|---|---|---|
| pg | PostgreSQL Database | pg/_examples | 
| jwt | JSON Web Tokens | jwt/_example | 
| 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 | 
| expmetric | Expvar for counting requests etc. | expmetric/_example | 
| zap | Provides log handling using zap package | zap/_examples | 
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.