• go的gin跨域中间件


    func CORSMiddleware() gin.HandlerFunc {

        return func(c *gin.Context) {
            c.Writer.Header().Set("Access-Control-Allow-Origin""*")
            c.Writer.Header().Set("Access-Control-Allow-Credentials""true")
            c.Writer.Header().Set("Access-Control-Allow-Headers""Content-Type, Content-Length, Accept-Encoding, X-CSRF-Token, Authorization, accept, origin, Cache-Control, X-Requested-With")
            c.Writer.Header().Set("Access-Control-Allow-Methods""POST, OPTIONS, GET, PUT")
     
            if c.Request.Method == "OPTIONS" {
                c.AbortWithStatus(204)
                return
            }
     
            c.Next()
        }
    }
     
     
    package handler

    import (
    "github.com/gin-gonic/gin"
    "net/http"
    "sshfortress/model"
    "strings"
    )

    const jwtCtxUidKey = "authedUserId"
    const bearerLength = len("Bearer ")

    func JwtMiddleware(c *gin.Context) {
    token, ok := c.GetQuery("_t")
    if !ok {
    hToken := c.GetHeader("Authorization")
    if len(hToken) < bearerLength {
    c.AbortWithStatusJSON(http.StatusPreconditionFailed, gin.H{"msg": "header Authorization has not Bearer token"})
    return
    }
    token = strings.TrimSpace(hToken[bearerLength:])
    }
    userId, err := model.JwtParseUser(token)
    if err != nil {
    c.AbortWithStatusJSON(http.StatusPreconditionFailed, gin.H{"msg": err.Error()})
    return
    }
    //store the user Model in the context
    c.Set(jwtCtxUidKey, userId)
    c.Next()
    // after request
    }



    func Cors() gin.HandlerFunc {
       return func(c *gin.Context) {
       method := c.Request.Method

        c.Header("Access-Control-Allow-Origin", "*")
        c.Header("Access-Control-Allow-Headers", "Content-Type,AccessToken,X-CSRF-Token, Authorization, Token")
        c.Header("Access-Control-Allow-Methods", "POST, GET, OPTIONS")
        c.Header("Access-Control-Expose-Headers", "Content-Length, Access-Control-Allow-Origin, Access-Control-Allow-    Headers, Content-Type")
        c.Header("Access-Control-Allow-Credentials", "true")

    //放行所有OPTIONS方法
       if method == "OPTIONS" {
              c.AbortWithStatus(http.StatusNoContent)
    }
    // 处理请求
    c.Next()
       }
    }
    3)在所有接口前增加router.Use(Cors()),放行所有的借口请求;

    func Login_api_start() {
        router := gin.Default()
       //放行所有的请求
        router.Use(Cors())
       //用户登录接口
       router.POST("/userlogin", Userlogin)
       //新增支出接口
        router.GET("/sub",Subtraction)
    //新增收入接口
       router.GET("/add",Add)
    //获取到字典表
       router.GET("/getdict",Getdict)
    //获取到支出信息
       router.GET("/getsub",Getsubtraction)
    //获取到每个人支出和收入的占比
       router.GET("/statistics",Statistics)
       router.Run(":8081")
    }

  • 相关阅读:
    二、七天入门Django开发 搭建最简Django的web服务
    四、七天入门Django开发 Django Shell
    七、七天入门Django开发 使用BootStrap实现博客页面渲染 跳转
    八、七天入门Django开发 Django 实现博客上下篇跳转
    Django报错 no such table: main.auth_user__old
    三、七天入门Django开发 Django模型层
    六、七天入门Django开发 使用Bootstrap实现博客页面渲染
    Raphael.js改变元素层叠顺序
    javascript匿名方法
    依赖注入(二)Autofac简单使用
  • 原文地址:https://www.cnblogs.com/cheyunhua/p/16072919.html
Copyright © 2020-2023  润新知