在日常我们编写web项目的时候,后端所有涉及到的接口,部分接口是需要经过用户登录之后才能访问的,部分接口是不需要用户登录就能访问的。所以这里我们承接前面的项目,来使用中间件对url进行拦截。下面直接开始:
1、编写一个新的controller
在controllers包下创建一个goodsController.go文件,我们在这里编写一个列举所有商品的接口,按照我们的要求,访问这个接口的话,需要拦截看用户是否登录,所以这里模拟编写一个获取商品的接口,代码示例如下:
package controllers import ( "github.com/gin-gonic/gin" "net/http" ) func ListGoods(c *gin.Context) { c.JSON(http.StatusOK, "获取商品列表成功") }
此时对应的整个工程视图如下:
2、使用中间件进行拦截
这里我们在前面编写了一个jwt.go的中间件,如下图:
这里已经实现了从request header头里面获取Authorization参数。然后进行判断。所以这里我们暂时不用管。
3、组织路由
最后一步就是组织路由,即把我们的获取商品列表的接口使用authorized中间件包起来,所以这里我们调整下routes.go文件:
修改里面的代码,把listgoods接口放在authorized里面,这样子只要请求listgoods的话就会直接对request进行拦截,判断header里面是否登录了。具体代码示例如下:
package routes import ( "awesomeProject/controllers" "awesomeProject/middleware" "github.com/gin-gonic/gin" ) func SetupRouter() *gin.Engine { r := gin.Default() r.POST("/resgister", controllers.RegisterUser) authorized := r.Group("/api") authorized.Use(middleware.AuthenticateJWT()) { authorized.GET("/listgoods", controllers.ListGoods) } return r }
四、测试运行
接下来我们测试访问下这个listgoods接口
可以看到成功的进行了拦截了。说明我们的中间件拦截代码是好使的。
还没有评论,来说两句吧...