golang gin——中间件编程以及jwt认证和跨域配置中间件案例
package main
import (
"fmt"
"github.com/gin-gonic/gin"
"net/http"
)
// JWT认证中间件
func JWTAuthMiddleware() gin.HandlerFunc {
return func(c *gin.Context) {
// 实现JWT认证逻辑
// 例如,检查请求头中的Authorization字段
// 如果认证失败,返回错误信息
// 如果认证成功,调用c.Next()继续后续处理
authorization := c.Request.Header.Get("Authorization")
if authorization == "" {
c.JSON(http.StatusUnauthorized, gin.H{"code": 401, "msg": "未认证"})
c.Abort()
return
}
// 假设jwtToken是从authorization字段中提取的token
jwtToken := "从authorization字段提取的token"
// 验证JWT token
if jwtToken != "valid_token" {
c.JSON(http.StatusUnauthorized, gin.H{"code": 401, "msg": "无效的token"})
c.Abort()
return
}
c.Next()
}
}
// 跨域请求中间件
func CORSMiddleware() gin.HandlerFunc {
return func(c *gin.Context) {
c.Writer.Header().Set("Access-Control-Allow-Origin", "*")
c.Writer.Header().Set("Access-Control-Max-Age", "86400")
c.Writer.Header().Set("Access-Control-Allow-Methods", "POST, GET, OPTIONS, PUT, DELETE, UPDATE")
c.Writer.Header().Set("Access-Control-Allow-Headers", "Origin, X-Requested-With, Content-Type, Accept, Authorization")
c.Writer.Header().Set("Access-Control-Expose-Headers", "Content-Length, Access-Control-Allow-Origin, Access-Control-Allow-Headers, Cache-Control, Content-Language, Content-Type")
c.Writer.Header().Set("Access-Control-Allow-Credentials", "true")
if c.Request.Method == "OPTIONS" {
fmt.Println("Preflight request received!")
c.AbortWithStatus(http.StatusNoContent)
} else {
c.Next()
}
}
}
func main() {
r := gin.Default()
// 使用JWT认证中间件
r.Use(JWTAuthMiddleware())
// 使用跨域请求中间件
r.Use(CORSMiddleware())
// 示例路由
r.GET("/hello", func(c *gin.Context) {
c.JSON(http.StatusOK, gin.H{"message": "Hello, World!"})
})
// 启动服务器
r.Run(":8080")
}
这段代码演示了如何在Gin框架中编写JWT认证中间件和处理跨域请求的中间件。在这个例子中,我们假设JWT认证成功通过检查请求头中的Authorization字段,并返回一个简单的JSON响应。跨域中间件允许跨源请求,并设置了一些标准的CORS头部。在实际应用中,JWT认证逻辑和CORS策略会根据具体需求进行更复杂的配置。
评论已关闭