Gin拦截器(中间件)&Token拦截器实现
以下是一个使用Gin框架实现Token拦截器的示例代码:
package main
import (
"fmt"
"github.com/gin-gonic/gin"
"net/http"
)
// 假设这是一个简单的Token验证函数
func ValidateToken(token string) bool {
// 实际应用中,这里应该是对token的验证逻辑
return token == "valid_token"
}
// Token拦截器
func TokenInterceptor() gin.HandlerFunc {
return func(c *gin.Context) {
// 从HTTP请求头中获取Token
token := c.Request.Header.Get("Authorization")
if !ValidateToken(token) {
c.AbortWithStatusJSON(http.StatusUnauthorized, gin.H{"error": "Invalid or missing token"})
return
}
// 如果Token有效,则继续执行后续的处理函数
c.Next()
}
}
func main() {
router := gin.Default()
// 全局使用Token拦截器
router.Use(TokenInterceptor())
router.GET("/secure", func(c *gin.Context) {
// 这个路由将只响应带有有效Token的请求
c.JSON(http.StatusOK, gin.H{"message": "You have accessed the secure endpoint!"})
})
// 启动服务器
if err := router.Run(":8080"); err != nil {
fmt.Printf("服务器启动失败: %v\n", err)
}
}
在这个示例中,我们定义了一个TokenInterceptor
函数,它返回一个Gin的中间件处理函数。这个处理函数会从请求头中获取Token,并使用一个假设的ValidateToken
函数来验证它。如果Token无效,它将返回一个401未授权的HTTP状态码和错误信息。如果Token有效,它将调用c.Next()
继续执行后续的处理函数。在main
函数中,我们通过router.Use
将Token拦截器应用到了全局,确保所有的路由都会先经过Token的验证。
评论已关闭