Browse Source

添加api权限认证中间件(使用原后端accessToken进行认证)

bigcat 2 years ago
parent
commit
c3ffe6cd5a
4 changed files with 57 additions and 1 deletions
  1. 4 1
      config/application.yml
  2. 2 0
      main.go
  3. 49 0
      middleware/AuthMiddleware.go
  4. 2 0
      router.go

+ 4 - 1
config/application.yml

@@ -9,4 +9,7 @@ datasource:
   username: lims-extend
   password: FF8GTRwEzCwRSGZx
   charset: utf8
-  loc: Asia/Shanghai
+  loc: Asia/Shanghai
+pybackend:
+  host: 47.110.247.58
+  port: 8002

+ 2 - 0
main.go

@@ -4,11 +4,13 @@ import (
 	"github.com/gin-gonic/gin"
 	"github.com/spf13/viper"
 	"lims-extend/common"
+	"lims-extend/middleware"
 	"os"
 )
 
 func main() {
 	InitConfig()
+	middleware.InitMiddleware(viper.GetString("pybackend.host"), viper.GetString("pybackend.port"))
 	common.InitDB()
 	r := gin.Default()
 	r = CollectRoute(r)

+ 49 - 0
middleware/AuthMiddleware.go

@@ -0,0 +1,49 @@
+package middleware
+
+import (
+	"fmt"
+	"github.com/gin-gonic/gin"
+	"io/ioutil"
+	"lims-extend/response"
+	"net/http"
+	"strings"
+	"time"
+)
+
+var (
+	pyBackendIp string
+	pyPort      string
+)
+
+func InitMiddleware(ip string, port string) {
+	pyBackendIp = ip
+	pyPort = port
+}
+
+func AuthMiddleware() gin.HandlerFunc {
+	return func(c *gin.Context) {
+		//获取authorization header
+		accessToken := c.GetHeader("accessToken")
+		client := &http.Client{Timeout: 1 * time.Second}
+		req, _ := http.NewRequest("GET",
+			fmt.Sprintf("http://%s:%s/api/v1/users/TestLaboratory_V1_User_1", pyBackendIp, pyPort), nil)
+		req.Header.Add("accessToken", accessToken)
+		resp, err := client.Do(req)
+		if err != nil || resp.StatusCode != 200 {
+			response.Fail(c, nil, "无法连接Python_Backend权限认证服务器")
+			c.Abort()
+			return
+		}
+		defer resp.Body.Close()
+		body, _ := ioutil.ReadAll(resp.Body)
+		res := string(body)
+		if strings.Contains(res, "username") {
+
+		} else {
+			response.Fail(c, nil, "权限不足")
+			c.Abort()
+			return
+		}
+
+	}
+}

+ 2 - 0
router.go

@@ -3,11 +3,13 @@ package main
 import (
 	"github.com/gin-gonic/gin"
 	"lims-extend/controller"
+	"lims-extend/middleware"
 )
 
 func CollectRoute(r *gin.Engine) *gin.Engine {
 
 	plan := r.Group("/api/v-go/plan")
+	plan.Use(middleware.AuthMiddleware())
 	{
 		plan.GET("lists/:userId", controller.ShowPlans)
 		plan.GET(":planId/:userId", controller.ShowPlan)