Go语言 如何使用gin框架的中间件做身份验证~~~

学习前提,对如何使用gin框架做基本的web服务有一个基本的认知~

server.go

package main

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


func main(){
  router:=gin.Default()
  router.Use(Validate())  //使用validate()中间件身份验证
  router.GET("/",Service1)
  router.Run(":8989")  //localhost:8989/
}

func Service1(c *gin.Context){
   c.JSON(http.StatusOK,gin.H{"message":"你好,欢迎你"})
}

func Validate() gin.HandlerFunc{
  return func(c *gin.Context){
    //这一部分可以替换成从session/cookie中获取,
    username:=c.Query("username")
    password:=c.Query("password")

    if username=="ft" && password =="123"{
       c.JSON(http.StatusOK,gin.H{"message":"身份验证成功"})
       c.Next()  //该句可以省略,写出来只是表明可以进行验证下一步中间件,不写,也是内置会继续访问下一个中间件的
    }else {
       c.Abort()
       c.JSON(http.StatusUnauthorized,gin.H{"message":"身份验证失败"})
       return// return也是可以省略的,执行了abort操作,会内置在中间件defer前,return,写出来也只是解答为什么Abort()之后,还能执行返回JSON数据
    }
  }
}

client.go

package main

import (
    "fmt"
    "io/ioutil"
    "net/http"
)

func main() {
    var resp *http.Response
    resp, _ = http.Get("http://10.0.203.92:8989?username=ft2&&password=123")
    // resp, _ = http.Get("http://10.0.203.92:8989?username=ft&&password=123")

    helpRead(resp)
}

func helpRead(resp *http.Response) {
    defer resp.Body.Close()
    body, err := ioutil.ReadAll(resp.Body)
    if err != nil {
        fmt.Println("ERROR2!: ", err)
    }
    fmt.Println(string(body))
}

工程架构图:
Go语言 如何使用gin框架的中间件做身份验证~~~_第1张图片

使用git直接分别在client.go和server.go路径目录下右键git bash here,需要安装git
git server.go
Go语言 如何使用gin框架的中间件做身份验证~~~_第2张图片

git client.go 和 server git的响应如下
Go语言 如何使用gin框架的中间件做身份验证~~~_第3张图片

正确的用户是ft 123
当输入ft2 123,欢迎的服务页面被拦截

你可能感兴趣的:(struts2,go)