在日常我们编写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接口
可以看到成功的进行了拦截了。说明我们的中间件拦截代码是好使的。













还没有评论,来说两句吧...