61396-Go语言程序设计项目化教程(微课版)7.3 中间件.pptx
《61396-Go语言程序设计项目化教程(微课版)7.3 中间件.pptx》由会员分享,可在线阅读,更多相关《61396-Go语言程序设计项目化教程(微课版)7.3 中间件.pptx(29页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、中间件中间件Gin中间件会话控制中间件开发流程01.03.02.目录文件上传04.01Gin中间件中间件定义Gin默认中间件中间件的分类1GinGin中间件中间件中间件是介于应用系统和系统软件之间的一类软件,它使用系统软件所提供的基础服务(功能),衔接网络上应用系统的各个部分或不同的应用,能够达到资源共享、功能共享的目的。中间件的定义Gin框架允许开发者在处理请求的过程中,加入用户自己的函数,这个函数就叫中间件。中间件适合处理一些公共的业务逻辑,比如登录认证、权限校验、数据分页、记录日志、耗时统计等。例如我们可以设置当用户访问一个网页的时候,不管访问什么路径都需要先进行登录,这就需要为所有路径
2、的处理函数设置统一的一个中间件,Gin的中间件必须是一个gin.HandlerFunc类型。Gin中的中间件1GinGin中间件中间件Gin框架本身提供了一些基础的中间件,使用router:=gin.Default()定义route时,是构建一个自带默认中间件的*Engine,该中间件默认带了Logger()和Recovery()。Gin默认中间件/Default returns an Engine instance with the Logger and Recovery middleware already attached.func Default()*Engine debugPrint
3、WARNINGDefault()engine:=New()engine.Use(Logger(),Recovery()return engine/Use attaches a global middleware to the router.i.e.the middleware attached through Use()will be included in the handlers chain for every single request.Even 404,405,static files./For example,this is the right place for a logger
4、 or error management middleware.func(engine*Engine)Use(middleware.HandlerFunc)IRoutes engine.RouterGroup.Use(middleware.)engine.rebuild404Handlers()engine.rebuild405Handlers()return engine/Logger instances a Logger middleware that will write the logs to gin.DefaultWriter./By default,gin.DefaultWrite
5、r=os.Stdout.func Logger()HandlerFunc return LoggerWithConfig(LoggerConfig)/Recovery returns a middleware that recovers from any panics and writes a 500 if there was one.func Recovery()HandlerFunc return RecoveryWithWriter(DefaultErrorWriter)1GinGin中间件中间件Gin的中间件是通过Use方法设置的,它接收一个可变参数,所以我们同时可以设置多个中间件。D
6、efault函数会默认绑定两个已经准备好的中间件,它们就是Logger 和 Recovery,帮助我们打印日志输出和painc处理。1GinGin中间件中间件HTTP Basic Authorization 是HTTP常用的认证方案,它通过Authorization 请求消息头含有服务器用于验证用户代理身份的凭证。格式为:Authorization:Basic 如果认证不成功,服务器返回401 Unauthorized 状态码以及WWW-Authenticate 消息头,让客户端输入用户名和密码进一步认证。在Gin中,为我们提供了gin.BasicAuth()帮我们生成基本认证的中间件。/Ba
7、sicAuth returns a Basic HTTP Authorization middleware.It takes as argument a mapstringstring where the key is the user name and the value is the password.func BasicAuth(accounts Accounts)HandlerFunc return BasicAuthForRealm(accounts,)中间件的典型应用:HTTP Basic Authorizationpackage mainimport( main()r:=gin.
8、Default()r.Use(gin.BasicAuth(gin.Accountsadmin:123456,)r.GET(/,func(c*gin.Context)c.JSON(200,登陆成功!)r.Run(:8080)1GinGin中间件中间件1GinGin中间件中间件虽然可以使用BasicAuth()中间件做一些简单的用户权限的认证但当使用了自定义的session时,Gin自带的中间件则不能满足需求此时可以编写自定义的中间件,并且将自定义的中间件加入到全局中间件队列中去每一个route的请求同样会到自定义的中间件中去,实现自定义的认证等因此,Gin的中间件大致可以分为两类:全局中间件和路
9、由中间件中间件的分类全局中间件作用于所有的路由上,所有的路由请求都需要经过这些全局中间件。全局中间件局部中间件作用于单个路由,并不是所有路由路由中间件02中间件开发流程Next()Abort()Set()Get()2中间件开发流程中间件开发流程Next()将请求传递给请求链中下一个处理方法当执行Next()的时候,程序会挂起当前执行的操作,并继续向下执行,等执行完成下面的函数,最后再反过来执行该中间件,完成完整请求的执行Next()/Next should be used only inside middleware./It executes the pending handlers in t
10、he chain inside the calling handler./See example in GitHub.func(c*Context)Next()c.index+for c.index int8(len(c.handlers)c.handlersc.index(c)c.index+package mainimport( main()r:=gin.New()r.Use(costTime()r.GET(/,func(c*gin.Context)c.JSON(200,首页)r.Run(:8080)func costTime()gin.HandlerFunc return func(c*
11、gin.Context)/请求前获取当前时间nowTime:=time.Now()/请求处理c.Next()/处理后获取消耗时间costTime:=time.Since(nowTime)url:=c.Request.URL.String()fmt.Printf(the request URL%s cost%vn,url,costTime)2中间件开发流程中间件开发流程2中间件开发流程中间件开发流程Abort()处理出现错误时,阻止当前中间件之后的所有程序执行,与return区别是Abort会继续执行当前中间件,return会返回上一级,不会执行当前中间件后的逻辑。Abort()/Abort p
12、revents pending handlers from being called.Note that this will not stop the current handler./Lets say you have an authorization middleware that validates that the current request is authorized./If the authorization fails(ex:the password does not match),call Abort to ensure the remaining handlers/for
13、 this request are not called.func(c*Context)Abort()c.index=abortIndexpackage mainimport( main()r:=gin.New()r.Use(costTime()r.GET(/,func(c*gin.Context)c.JSON(200,首页)r.Run(:8080)func costTime()gin.HandlerFunc return func(c*gin.Context)/请求前获取当前时间nowTime:=time.Now()/请求处理c.Abort()/处理后获取消耗时间costTime:=time
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 61396-Go语言程序设计项目化教程微课版7.3 中间件 61396 Go 语言程序设计 项目 教程 微课版 7.3
限制150内