From ed5734c9c48882dd395412862936791436b3948c Mon Sep 17 00:00:00 2001 From: yumaojun03 <719118794@qq.com> Date: Sun, 15 Dec 2024 15:10:44 +0800 Subject: [PATCH] =?UTF-8?q?=E8=A1=A5=E5=85=85Set=20Cookie?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- vblog/Makefile | 23 +++++ vblog/README.md | 115 ++++++++++++++++++++++++- vblog/apps/blog/api/api.go | 34 +++++--- vblog/apps/blog/model_test.go | 4 +- vblog/apps/token/api/api.go | 36 +++++--- vblog/apps/token/const.go | 5 ++ vblog/apps/token/model.go | 7 ++ vblog/apps/token/model_test.go | 4 +- vblog/apps/user/model_test.go | 4 +- vblog/etc/application.toml | 5 ++ vblog/logs/main.log | 20 +++++ vblog/logs/vblog.log | 143 +++++++++++++++++++++++++++++++ vblog/main.go | 26 ++++-- vblog/middleware/auth.go | 12 +++ vblog/server/server.go | 8 -- vblog/{config => test}/README.md | 0 vblog/{config => test}/setup.go | 3 +- 17 files changed, 402 insertions(+), 47 deletions(-) create mode 100644 vblog/Makefile create mode 100644 vblog/apps/token/const.go create mode 100644 vblog/logs/main.log create mode 100644 vblog/logs/vblog.log delete mode 100644 vblog/server/server.go rename vblog/{config => test}/README.md (100%) rename vblog/{config => test}/setup.go (94%) diff --git a/vblog/Makefile b/vblog/Makefile new file mode 100644 index 0000000..7fad228 --- /dev/null +++ b/vblog/Makefile @@ -0,0 +1,23 @@ +PKG := "gitlab.com/go-course-project/go17/vblog" +MOD_DIR := $(shell go env GOPATH)/pkg/mod +PKG_LIST := $(shell go list ${PKG}/... | grep -v /vendor/ | grep -v redis) +GO_FILES := $(shell find . -name '*.go' | grep -v /vendor/ | grep -v _test.go) + +.PHONY: all dep lint vet test test-coverage build clean + +all: build + +dep: ## Get the dependencies + @go mod tidy + +lint: ## Lint Golang files + @golint -set_exit_status ${PKG_LIST} + +vet: ## Run go vet + @go vet ${PKG_LIST} + +run: ## Run Server + @go run main.go start + +help: ## Display this help screen + @grep -h -E '^[a-zA-Z_-]+:.*?## .*$$' $(MAKEFILE_LIST) | awk 'BEGIN {FS = ":.*?## "}; {printf "\033[36m%-30s\033[0m %s\n", $$1, $$2}' \ No newline at end of file diff --git a/vblog/README.md b/vblog/README.md index 09b89b4..71c0b06 100644 --- a/vblog/README.md +++ b/vblog/README.md @@ -380,4 +380,117 @@ func main() { log.Println(err) } } -``` \ No newline at end of file +``` + + +修改为使用cli来用 ++ cobra 的 OnInitialize 进行ioc配置的读取,与加载 ++ start 命令 调用 server.run 来进行 服务启动 + + +### ioc 托管Gin框架 + +```go +// module_name +func (h *BlogApiHandler) Name() string { + return "blogs" +} + +// router := r.Group("/vblog/api/v1/blogs") +// ioc_gin.ObjectRouter(h) +// 模块的名称, 会作为路径的一部分比如: /mcube_service/api/v1/hello_module/ +// 路径构成规则 /// +func (h *BlogApiHandler) Init() error { + h.blog = blog.GetService() + // 在ioc获取gin server *gin.Engine + ioc_gin.RootRouter() + + // 获取模块路有: url前缀, + r := ioc_gin.ObjectRouter(h) + r.GET("", h.QueryBlog) + + r.Use(middleware.Auth) + r.POST("", h.CreateBlog) + return nil +} +``` + + +```go +func main() { + // load config and run with cobra cli + // 使用ioc的 gin来进行路由加载 + cmd.Start() +} +``` + +### 测试验证 + +```sh +curl --location 'http://127.0.0.1:8080/api/vblog/v1/blogs' \ +--header 'Content-Type: application/json' --header 'Authorization: Bearer eaabbe42-9bc0-4a8e-bd86-c92542d062bb' \ +--data '{ + "title": "POSTMAN测试01", + "author": "will", + "content": "post man 测试", + "summary": "Go全栈项目", + "category": "软件开发" +}' +``` + +```sh +curl --location 'http://127.0.0.1:8080/api/vblog/v1/tokens' \ +--header 'Content-Type: application/json' \ +--data '{ + "username": "admin", + "password": "123456" +}' +``` + +## 其他的优化 + + +### Make + +```makefile +PKG := "gitlab.com/go-course-project/go17/vblog" +MOD_DIR := $(shell go env GOPATH)/pkg/mod +PKG_LIST := $(shell go list ${PKG}/... | grep -v /vendor/ | grep -v redis) +GO_FILES := $(shell find . -name '*.go' | grep -v /vendor/ | grep -v _test.go) + +.PHONY: all dep lint vet test test-coverage build clean + +all: build + +dep: ## Get the dependencies + @go mod tidy + +lint: ## Lint Golang files + @golint -set_exit_status ${PKG_LIST} + +vet: ## Run go vet + @go vet ${PKG_LIST} + +run: ## Run Server + @go run main.go start + +help: ## Display this help screen + @grep -h -E '^[a-zA-Z_-]+:.*?## .*$$' $(MAKEFILE_LIST) | awk 'BEGIN {FS = ":.*?## "}; {printf "\033[36m%-30s\033[0m %s\n", $$1, $$2}' +``` + +### Cookie机制 + +需要手动携带Token, Post, 这会比较安全, 但是有些时候不方便, 如果你想要每次服务端调用 浏览器或者Postman这类工具 可以自动给你携带 + +颁发Token的时候, 通过客户端(浏览器/Postman), Set-Cookie头 + +1. 颁发Token是不是要 Set-Cookie +```go + // 设置Cookie + ctx.SetCookie(token.COOKIE_NAME, ins.AccessToken, ins.AccessTokenExpireTTL(), "/", application.Get().Domain(), false, true) +``` + +2. 获取Token是不是也需要Cookie当作获取Token + + + diff --git a/vblog/apps/blog/api/api.go b/vblog/apps/blog/api/api.go index 434eef0..ec0a358 100644 --- a/vblog/apps/blog/api/api.go +++ b/vblog/apps/blog/api/api.go @@ -6,7 +6,9 @@ import ( "github.com/infraboard/mcube/v2/ioc" "gitlab.com/go-course-project/go17/vblog/apps/blog" "gitlab.com/go-course-project/go17/vblog/middleware" - "gitlab.com/go-course-project/go17/vblog/server" + + // 引入Gin Root Router: *gin.Engine + ioc_gin "github.com/infraboard/mcube/v2/ioc/config/gin" ) // 上传怎么用: @@ -27,20 +29,28 @@ type BlogApiHandler struct { blog blog.Service } -func (i *BlogApiHandler) Init() error { - i.blog = blog.GetService() - i.Registry(server.GinServer) - return nil +// module_name +func (h *BlogApiHandler) Name() string { + return "blogs" } -// 提供注册功能, 提供一个Group -// book := server.Group("/api/tokens") -func (h *BlogApiHandler) Registry(r *gin.Engine) { - router := r.Group("/vblog/api/v1/blogs") - router.GET("", h.QueryBlog) +// router := r.Group("/vblog/api/v1/blogs") +// ioc_gin.ObjectRouter(h) +// 模块的名称, 会作为路径的一部分比如: /api/mcube_service/v1/hello_module/ +// /api/xxx_service +// 路径构成规则 //// +func (h *BlogApiHandler) Init() error { + h.blog = blog.GetService() + // 在ioc获取gin server *gin.Engine + ioc_gin.RootRouter() - router.Use(middleware.Auth) - router.POST("", h.CreateBlog) + // 获取模块路有: url前缀, + r := ioc_gin.ObjectRouter(h) + r.GET("", h.QueryBlog) + + r.Use(middleware.Auth) + r.POST("", h.CreateBlog) + return nil } // BODY diff --git a/vblog/apps/blog/model_test.go b/vblog/apps/blog/model_test.go index f73ae57..306dfc7 100644 --- a/vblog/apps/blog/model_test.go +++ b/vblog/apps/blog/model_test.go @@ -5,7 +5,7 @@ import ( "github.com/infraboard/mcube/v2/ioc/config/datasource" "gitlab.com/go-course-project/go17/vblog/apps/blog" - "gitlab.com/go-course-project/go17/vblog/config" + "gitlab.com/go-course-project/go17/vblog/test" ) func TestMigrate(t *testing.T) { @@ -16,5 +16,5 @@ func TestMigrate(t *testing.T) { } func init() { - config.LoadConfig() + test.LoadConfig() } diff --git a/vblog/apps/token/api/api.go b/vblog/apps/token/api/api.go index 2f46103..f4d4aff 100644 --- a/vblog/apps/token/api/api.go +++ b/vblog/apps/token/api/api.go @@ -5,7 +5,11 @@ import ( "github.com/infraboard/mcube/v2/http/gin/response" "github.com/infraboard/mcube/v2/ioc" "gitlab.com/go-course-project/go17/vblog/apps/token" - "gitlab.com/go-course-project/go17/vblog/server" + + // 引入Gin Root Router: *gin.Engine + "github.com/infraboard/mcube/v2/ioc/config/application" + ioc_gin "github.com/infraboard/mcube/v2/ioc/config/gin" + "github.com/infraboard/mcube/v2/ioc/config/log" ) func init() { @@ -18,18 +22,22 @@ type TokenApiHandler struct { token token.UserService } -func (i *TokenApiHandler) Init() error { - i.token = token.GetService() - i.Registry(server.GinServer) +// router 也从ioc中 获取 +func (h *TokenApiHandler) Init() error { + h.token = token.GetService() + + // 在ioc获取gin server *gin.Engine + ioc_gin.RootRouter() + + // 获取模块路有: url前缀, + r := ioc_gin.ObjectRouter(h) + r.POST("", h.IssueToken) + r.DELETE("", h.RevolkToken) return nil } -// 提供注册功能, 提供一个Group -// book := server.Group("/api/tokens") -func (h *TokenApiHandler) Registry(r *gin.Engine) { - router := r.Group("/vblog/api/v1/tokens") - router.POST("", h.IssueToken) - router.DELETE("", h.RevolkToken) +func (h *TokenApiHandler) Name() string { + return "tokens" } func (h *TokenApiHandler) IssueToken(ctx *gin.Context) { @@ -43,6 +51,14 @@ func (h *TokenApiHandler) IssueToken(ctx *gin.Context) { response.Failed(ctx, err) return } + + // 打印下日志, ioc + domain := application.Get().Domain() + log.L().Debug().Msgf("cookie domain: %s", domain) + + // 设置Cookie + ctx.SetCookie(token.COOKIE_NAME, ins.AccessToken, ins.AccessTokenExpireTTL(), "/", domain, false, true) + response.Success(ctx, ins) } diff --git a/vblog/apps/token/const.go b/vblog/apps/token/const.go new file mode 100644 index 0000000..7b859b1 --- /dev/null +++ b/vblog/apps/token/const.go @@ -0,0 +1,5 @@ +package token + +const ( + COOKIE_NAME = "token" +) diff --git a/vblog/apps/token/model.go b/vblog/apps/token/model.go index 7463b3d..dec1380 100644 --- a/vblog/apps/token/model.go +++ b/vblog/apps/token/model.go @@ -43,6 +43,13 @@ type Token struct { RefUserName string `json:"ref_user_name" gorm:"-"` } +func (r *Token) AccessTokenExpireTTL() int { + if r.AccessTokenExpireAt == nil { + return 0 + } + return int(time.Until(*r.AccessTokenExpireAt).Seconds()) +} + func (r *Token) String() string { return pretty.ToJSON(r) } diff --git a/vblog/apps/token/model_test.go b/vblog/apps/token/model_test.go index 4c08c0d..1296c88 100644 --- a/vblog/apps/token/model_test.go +++ b/vblog/apps/token/model_test.go @@ -5,7 +5,7 @@ import ( "github.com/infraboard/mcube/v2/ioc/config/datasource" "gitlab.com/go-course-project/go17/vblog/apps/token" - "gitlab.com/go-course-project/go17/vblog/config" + "gitlab.com/go-course-project/go17/vblog/test" ) func TestMigrate(t *testing.T) { @@ -16,5 +16,5 @@ func TestMigrate(t *testing.T) { } func init() { - config.LoadConfig() + test.LoadConfig() } diff --git a/vblog/apps/user/model_test.go b/vblog/apps/user/model_test.go index f327692..d35f154 100644 --- a/vblog/apps/user/model_test.go +++ b/vblog/apps/user/model_test.go @@ -5,7 +5,7 @@ import ( "github.com/infraboard/mcube/v2/ioc/config/datasource" "gitlab.com/go-course-project/go17/vblog/apps/user" - "gitlab.com/go-course-project/go17/vblog/config" + "gitlab.com/go-course-project/go17/vblog/test" ) func TestMigrate(t *testing.T) { @@ -16,5 +16,5 @@ func TestMigrate(t *testing.T) { } func init() { - config.LoadConfig() + test.LoadConfig() } diff --git a/vblog/etc/application.toml b/vblog/etc/application.toml index 160de84..1322c19 100644 --- a/vblog/etc/application.toml +++ b/vblog/etc/application.toml @@ -1,3 +1,8 @@ +[app] + name = "vblog" + description = "app desc" + address = "http://127.0.0.1" + [http] # HTTP服务Host host = "127.0.0.1" diff --git a/vblog/logs/main.log b/vblog/logs/main.log new file mode 100644 index 0000000..371d019 --- /dev/null +++ b/vblog/logs/main.log @@ -0,0 +1,20 @@ +{"level":"info","component":"server","time":"2024-12-15T14:11:34+08:00","caller":"ioc/server/server.go:74","message":"loaded configs: [app.v1 trace.v1 log.v1 validator.v1 datasource.v1 grpc.v1 http.v1]"} +{"level":"info","component":"server","time":"2024-12-15T14:11:34+08:00","caller":"ioc/server/server.go:75","message":"loaded controllers: [token.v1 user.v1 blog.v1]"} +{"level":"info","component":"server","time":"2024-12-15T14:11:34+08:00","caller":"ioc/server/server.go:76","message":"loaded apis: [*api.BlogApiHandler.v1 *api.TokenApiHandler.v1]"} +{"level":"info","component":"server","time":"2024-12-15T14:11:34+08:00","caller":"ioc/server/server.go:77","message":"loaded defaults: []"} +{"level":"info","component":"server","time":"2024-12-15T14:14:33+08:00","caller":"ioc/server/server.go:101","message":"receive signal 'interrupt', start graceful shutdown"} +{"level":"info","component":"server","time":"2024-12-15T14:14:44+08:00","caller":"ioc/server/server.go:74","message":"loaded configs: [app.v1 trace.v1 log.v1 grpc.v1 http.v1]"} +{"level":"info","component":"server","time":"2024-12-15T14:14:44+08:00","caller":"ioc/server/server.go:75","message":"loaded controllers: []"} +{"level":"info","component":"server","time":"2024-12-15T14:14:44+08:00","caller":"ioc/server/server.go:76","message":"loaded apis: []"} +{"level":"info","component":"server","time":"2024-12-15T14:14:44+08:00","caller":"ioc/server/server.go:77","message":"loaded defaults: []"} +{"level":"info","component":"server","time":"2024-12-15T14:15:14+08:00","caller":"ioc/server/server.go:101","message":"receive signal 'interrupt', start graceful shutdown"} +{"level":"info","component":"server","time":"2024-12-15T14:15:16+08:00","caller":"ioc/server/server.go:74","message":"loaded configs: [app.v1 trace.v1 log.v1 validator.v1 datasource.v1 grpc.v1 http.v1]"} +{"level":"info","component":"server","time":"2024-12-15T14:15:16+08:00","caller":"ioc/server/server.go:75","message":"loaded controllers: [token.v1 user.v1 blog.v1]"} +{"level":"info","component":"server","time":"2024-12-15T14:15:16+08:00","caller":"ioc/server/server.go:76","message":"loaded apis: [*api.BlogApiHandler.v1 *api.TokenApiHandler.v1]"} +{"level":"info","component":"server","time":"2024-12-15T14:15:16+08:00","caller":"ioc/server/server.go:77","message":"loaded defaults: []"} +{"level":"info","component":"server","time":"2024-12-15T14:16:20+08:00","caller":"ioc/server/server.go:101","message":"receive signal 'interrupt', start graceful shutdown"} +{"level":"info","component":"server","time":"2024-12-15T14:19:31+08:00","caller":"ioc/server/server.go:74","message":"loaded configs: [app.v1 trace.v1 log.v1 validator.v1 datasource.v1 grpc.v1 http.v1]"} +{"level":"info","component":"server","time":"2024-12-15T14:19:31+08:00","caller":"ioc/server/server.go:75","message":"loaded controllers: [token.v1 user.v1 blog.v1]"} +{"level":"info","component":"server","time":"2024-12-15T14:19:31+08:00","caller":"ioc/server/server.go:76","message":"loaded apis: [*api.BlogApiHandler.v1 *api.TokenApiHandler.v1]"} +{"level":"info","component":"server","time":"2024-12-15T14:19:31+08:00","caller":"ioc/server/server.go:77","message":"loaded defaults: []"} +{"level":"info","component":"server","time":"2024-12-15T14:32:21+08:00","caller":"ioc/server/server.go:101","message":"receive signal 'interrupt', start graceful shutdown"} diff --git a/vblog/logs/vblog.log b/vblog/logs/vblog.log new file mode 100644 index 0000000..7973502 --- /dev/null +++ b/vblog/logs/vblog.log @@ -0,0 +1,143 @@ +{"level":"info","component":"gin_webframework","time":"2024-12-15T14:32:23+08:00","caller":"config/gin/framework.go:41","message":"enable gin recovery"} +{"level":"info","component":"server","time":"2024-12-15T14:32:23+08:00","caller":"ioc/server/server.go:74","message":"loaded configs: [app.v1 trace.v1 log.v1 validator.v1 gin_webframework.v1 datasource.v1 grpc.v1 http.v1]"} +{"level":"info","component":"server","time":"2024-12-15T14:32:23+08:00","caller":"ioc/server/server.go:75","message":"loaded controllers: [token.v1 user.v1 blog.v1]"} +{"level":"info","component":"server","time":"2024-12-15T14:32:23+08:00","caller":"ioc/server/server.go:76","message":"loaded apis: [blogs.v1 tokens.v1]"} +{"level":"info","component":"server","time":"2024-12-15T14:32:23+08:00","caller":"ioc/server/server.go:77","message":"loaded defaults: []"} +{"level":"info","component":"http","time":"2024-12-15T14:32:23+08:00","caller":"config/http/http.go:144","message":"HTTP服务启动成功, 监听地址: 127.0.0.1:8080"} +{"level":"info","component":"server","time":"2024-12-15T14:37:46+08:00","caller":"ioc/server/server.go:101","message":"receive signal 'interrupt', start graceful shutdown"} +{"level":"info","component":"http","time":"2024-12-15T14:37:46+08:00","caller":"config/http/http.go:152","message":"start graceful shutdown"} +{"level":"error","component":"http","time":"2024-12-15T14:37:46+08:00","caller":"config/http/http.go:146","message":"http: Server closed"} +{"level":"info","component":"server","time":"2024-12-15T14:37:46+08:00","caller":"ioc/server/server.go:115","message":"http service stop complete"} +{"level":"info","component":"gin_webframework","time":"2024-12-15T14:38:06+08:00","caller":"config/gin/framework.go:41","message":"enable gin recovery"} +{"level":"info","component":"server","time":"2024-12-15T14:38:06+08:00","caller":"ioc/server/server.go:74","message":"loaded configs: [app.v1 trace.v1 log.v1 validator.v1 gin_webframework.v1 datasource.v1 grpc.v1 http.v1]"} +{"level":"info","component":"server","time":"2024-12-15T14:38:06+08:00","caller":"ioc/server/server.go:75","message":"loaded controllers: [token.v1 user.v1 blog.v1]"} +{"level":"info","component":"server","time":"2024-12-15T14:38:06+08:00","caller":"ioc/server/server.go:76","message":"loaded apis: [blogs.v1 tokens.v1]"} +{"level":"info","component":"server","time":"2024-12-15T14:38:06+08:00","caller":"ioc/server/server.go:77","message":"loaded defaults: []"} +{"level":"info","component":"http","time":"2024-12-15T14:38:06+08:00","caller":"config/http/http.go:144","message":"HTTP服务启动成功, 监听地址: 127.0.0.1:8081"} +{"level":"info","component":"server","time":"2024-12-15T14:38:17+08:00","caller":"ioc/server/server.go:101","message":"receive signal 'interrupt', start graceful shutdown"} +{"level":"info","component":"http","time":"2024-12-15T14:38:17+08:00","caller":"config/http/http.go:152","message":"start graceful shutdown"} +{"level":"error","component":"http","time":"2024-12-15T14:38:17+08:00","caller":"config/http/http.go:146","message":"http: Server closed"} +{"level":"info","component":"server","time":"2024-12-15T14:38:17+08:00","caller":"ioc/server/server.go:115","message":"http service stop complete"} +{"level":"info","component":"gin_webframework","time":"2024-12-15T14:38:19+08:00","caller":"config/gin/framework.go:41","message":"enable gin recovery"} +{"level":"info","component":"server","time":"2024-12-15T14:38:19+08:00","caller":"ioc/server/server.go:74","message":"loaded configs: [app.v1 trace.v1 log.v1 validator.v1 gin_webframework.v1 datasource.v1 grpc.v1 http.v1]"} +{"level":"info","component":"server","time":"2024-12-15T14:38:19+08:00","caller":"ioc/server/server.go:75","message":"loaded controllers: [token.v1 user.v1 blog.v1]"} +{"level":"info","component":"server","time":"2024-12-15T14:38:19+08:00","caller":"ioc/server/server.go:76","message":"loaded apis: [blogs.v1 tokens.v1]"} +{"level":"info","component":"server","time":"2024-12-15T14:38:19+08:00","caller":"ioc/server/server.go:77","message":"loaded defaults: []"} +{"level":"info","component":"http","time":"2024-12-15T14:38:19+08:00","caller":"config/http/http.go:144","message":"HTTP服务启动成功, 监听地址: 127.0.0.1:8080"} +{"level":"info","component":"server","time":"2024-12-15T14:43:49+08:00","caller":"ioc/server/server.go:101","message":"receive signal 'interrupt', start graceful shutdown"} +{"level":"info","component":"http","time":"2024-12-15T14:43:49+08:00","caller":"config/http/http.go:152","message":"start graceful shutdown"} +{"level":"error","component":"http","time":"2024-12-15T14:43:49+08:00","caller":"config/http/http.go:146","message":"http: Server closed"} +{"level":"info","component":"server","time":"2024-12-15T14:43:49+08:00","caller":"ioc/server/server.go:115","message":"http service stop complete"} +{"level":"info","component":"gin_webframework","time":"2024-12-15T14:47:16+08:00","caller":"config/gin/framework.go:41","message":"enable gin recovery"} +{"level":"info","component":"gin_webframework","time":"2024-12-15T14:47:21+08:00","caller":"config/gin/framework.go:41","message":"enable gin recovery"} +{"level":"info","component":"server","time":"2024-12-15T14:47:21+08:00","caller":"ioc/server/server.go:74","message":"loaded configs: [app.v1 trace.v1 log.v1 validator.v1 gin_webframework.v1 datasource.v1 grpc.v1 http.v1]"} +{"level":"info","component":"server","time":"2024-12-15T14:47:21+08:00","caller":"ioc/server/server.go:75","message":"loaded controllers: [token.v1 user.v1 blog.v1]"} +{"level":"info","component":"server","time":"2024-12-15T14:47:21+08:00","caller":"ioc/server/server.go:76","message":"loaded apis: [blogs.v1 tokens.v1]"} +{"level":"info","component":"server","time":"2024-12-15T14:47:21+08:00","caller":"ioc/server/server.go:77","message":"loaded defaults: []"} +{"level":"info","component":"http","time":"2024-12-15T14:47:21+08:00","caller":"config/http/http.go:144","message":"HTTP服务启动成功, 监听地址: 127.0.0.1:8080"} +{"level":"info","component":"gin_webframework","time":"2024-12-15T14:56:37+08:00","caller":"config/gin/framework.go:41","message":"enable gin recovery"} +{"level":"info","component":"server","time":"2024-12-15T14:56:37+08:00","caller":"ioc/server/server.go:74","message":"loaded configs: [app.v1 trace.v1 log.v1 validator.v1 gin_webframework.v1 datasource.v1 grpc.v1 http.v1]"} +{"level":"info","component":"server","time":"2024-12-15T14:56:37+08:00","caller":"ioc/server/server.go:75","message":"loaded controllers: [token.v1 user.v1 blog.v1]"} +{"level":"info","component":"server","time":"2024-12-15T14:56:37+08:00","caller":"ioc/server/server.go:76","message":"loaded apis: [blogs.v1 tokens.v1]"} +{"level":"info","component":"server","time":"2024-12-15T14:56:37+08:00","caller":"ioc/server/server.go:77","message":"loaded defaults: []"} +{"level":"info","component":"http","time":"2024-12-15T14:56:37+08:00","caller":"config/http/http.go:144","message":"HTTP服务启动成功, 监听地址: 127.0.0.1:8080"} +{"level":"error","component":"http","time":"2024-12-15T14:56:37+08:00","caller":"config/http/http.go:146","message":"listen tcp 127.0.0.1:8080: bind: address already in use"} +{"level":"info","component":"server","time":"2024-12-15T14:56:45+08:00","caller":"ioc/server/server.go:101","message":"receive signal 'interrupt', start graceful shutdown"} +{"level":"info","component":"http","time":"2024-12-15T14:56:45+08:00","caller":"config/http/http.go:152","message":"start graceful shutdown"} +{"level":"info","component":"server","time":"2024-12-15T14:56:45+08:00","caller":"ioc/server/server.go:115","message":"http service stop complete"} +{"level":"info","component":"gin_webframework","time":"2024-12-15T14:59:50+08:00","caller":"config/gin/framework.go:41","message":"enable gin recovery"} +{"level":"info","component":"server","time":"2024-12-15T14:59:50+08:00","caller":"ioc/server/server.go:74","message":"loaded configs: [app.v1 trace.v1 log.v1 validator.v1 gin_webframework.v1 datasource.v1 grpc.v1 http.v1]"} +{"level":"info","component":"server","time":"2024-12-15T14:59:50+08:00","caller":"ioc/server/server.go:75","message":"loaded controllers: [token.v1 user.v1 blog.v1]"} +{"level":"info","component":"server","time":"2024-12-15T14:59:50+08:00","caller":"ioc/server/server.go:76","message":"loaded apis: [blogs.v1 tokens.v1]"} +{"level":"info","component":"server","time":"2024-12-15T14:59:50+08:00","caller":"ioc/server/server.go:77","message":"loaded defaults: []"} +{"level":"info","component":"http","time":"2024-12-15T14:59:50+08:00","caller":"config/http/http.go:144","message":"HTTP服务启动成功, 监听地址: 127.0.0.1:8080"} +{"level":"error","component":"http","time":"2024-12-15T14:59:50+08:00","caller":"config/http/http.go:146","message":"listen tcp 127.0.0.1:8080: bind: address already in use"} +{"level":"info","component":"server","time":"2024-12-15T14:59:51+08:00","caller":"ioc/server/server.go:101","message":"receive signal 'interrupt', start graceful shutdown"} +{"level":"info","component":"http","time":"2024-12-15T14:59:51+08:00","caller":"config/http/http.go:152","message":"start graceful shutdown"} +{"level":"info","component":"server","time":"2024-12-15T14:59:51+08:00","caller":"ioc/server/server.go:115","message":"http service stop complete"} +{"level":"info","component":"gin_webframework","time":"2024-12-15T15:00:24+08:00","caller":"config/gin/framework.go:41","message":"enable gin recovery"} +{"level":"info","component":"server","time":"2024-12-15T15:00:24+08:00","caller":"ioc/server/server.go:74","message":"loaded configs: [app.v1 trace.v1 log.v1 validator.v1 gin_webframework.v1 datasource.v1 grpc.v1 http.v1]"} +{"level":"info","component":"server","time":"2024-12-15T15:00:24+08:00","caller":"ioc/server/server.go:75","message":"loaded controllers: [token.v1 user.v1 blog.v1]"} +{"level":"info","component":"server","time":"2024-12-15T15:00:24+08:00","caller":"ioc/server/server.go:76","message":"loaded apis: [blogs.v1 tokens.v1]"} +{"level":"info","component":"server","time":"2024-12-15T15:00:24+08:00","caller":"ioc/server/server.go:77","message":"loaded defaults: []"} +{"level":"info","component":"http","time":"2024-12-15T15:00:24+08:00","caller":"config/http/http.go:144","message":"HTTP服务启动成功, 监听地址: 127.0.0.1:8080"} +{"level":"error","component":"http","time":"2024-12-15T15:00:24+08:00","caller":"config/http/http.go:146","message":"listen tcp 127.0.0.1:8080: bind: address already in use"} +{"level":"info","component":"server","time":"2024-12-15T15:00:27+08:00","caller":"ioc/server/server.go:101","message":"receive signal 'interrupt', start graceful shutdown"} +{"level":"info","component":"http","time":"2024-12-15T15:00:27+08:00","caller":"config/http/http.go:152","message":"start graceful shutdown"} +{"level":"info","component":"server","time":"2024-12-15T15:00:27+08:00","caller":"ioc/server/server.go:115","message":"http service stop complete"} +{"level":"info","component":"gin_webframework","time":"2024-12-15T15:00:47+08:00","caller":"config/gin/framework.go:41","message":"enable gin recovery"} +{"level":"info","component":"server","time":"2024-12-15T15:00:47+08:00","caller":"ioc/server/server.go:74","message":"loaded configs: [app.v1 trace.v1 log.v1 validator.v1 gin_webframework.v1 datasource.v1 grpc.v1 http.v1]"} +{"level":"info","component":"server","time":"2024-12-15T15:00:47+08:00","caller":"ioc/server/server.go:75","message":"loaded controllers: [token.v1 user.v1 blog.v1]"} +{"level":"info","component":"server","time":"2024-12-15T15:00:47+08:00","caller":"ioc/server/server.go:76","message":"loaded apis: [blogs.v1 tokens.v1]"} +{"level":"info","component":"server","time":"2024-12-15T15:00:47+08:00","caller":"ioc/server/server.go:77","message":"loaded defaults: []"} +{"level":"info","component":"http","time":"2024-12-15T15:00:47+08:00","caller":"config/http/http.go:144","message":"HTTP服务启动成功, 监听地址: 127.0.0.1:8080"} +{"level":"error","component":"http","time":"2024-12-15T15:00:47+08:00","caller":"config/http/http.go:146","message":"listen tcp 127.0.0.1:8080: bind: address already in use"} +{"level":"info","component":"server","time":"2024-12-15T15:00:50+08:00","caller":"ioc/server/server.go:101","message":"receive signal 'interrupt', start graceful shutdown"} +{"level":"info","component":"http","time":"2024-12-15T15:00:50+08:00","caller":"config/http/http.go:152","message":"start graceful shutdown"} +{"level":"info","component":"server","time":"2024-12-15T15:00:50+08:00","caller":"ioc/server/server.go:115","message":"http service stop complete"} +{"level":"info","component":"gin_webframework","time":"2024-12-15T15:01:23+08:00","caller":"config/gin/framework.go:41","message":"enable gin recovery"} +{"level":"info","component":"server","time":"2024-12-15T15:01:23+08:00","caller":"ioc/server/server.go:74","message":"loaded configs: [app.v1 trace.v1 log.v1 validator.v1 gin_webframework.v1 datasource.v1 grpc.v1 http.v1]"} +{"level":"info","component":"server","time":"2024-12-15T15:01:23+08:00","caller":"ioc/server/server.go:75","message":"loaded controllers: [token.v1 user.v1 blog.v1]"} +{"level":"info","component":"server","time":"2024-12-15T15:01:23+08:00","caller":"ioc/server/server.go:76","message":"loaded apis: [blogs.v1 tokens.v1]"} +{"level":"info","component":"server","time":"2024-12-15T15:01:23+08:00","caller":"ioc/server/server.go:77","message":"loaded defaults: []"} +{"level":"info","component":"http","time":"2024-12-15T15:01:23+08:00","caller":"config/http/http.go:144","message":"HTTP服务启动成功, 监听地址: 127.0.0.1:8080"} +{"level":"error","component":"http","time":"2024-12-15T15:01:23+08:00","caller":"config/http/http.go:146","message":"listen tcp 127.0.0.1:8080: bind: address already in use"} +{"level":"info","component":"server","time":"2024-12-15T15:02:21+08:00","caller":"ioc/server/server.go:101","message":"receive signal 'interrupt', start graceful shutdown"} +{"level":"info","component":"http","time":"2024-12-15T15:02:21+08:00","caller":"config/http/http.go:152","message":"start graceful shutdown"} +{"level":"info","component":"server","time":"2024-12-15T15:02:21+08:00","caller":"ioc/server/server.go:115","message":"http service stop complete"} +{"level":"info","component":"gin_webframework","time":"2024-12-15T15:02:38+08:00","caller":"config/gin/framework.go:41","message":"enable gin recovery"} +{"level":"info","component":"server","time":"2024-12-15T15:02:38+08:00","caller":"ioc/server/server.go:74","message":"loaded configs: [app.v1 trace.v1 log.v1 validator.v1 gin_webframework.v1 datasource.v1 grpc.v1 http.v1]"} +{"level":"info","component":"server","time":"2024-12-15T15:02:38+08:00","caller":"ioc/server/server.go:75","message":"loaded controllers: [token.v1 user.v1 blog.v1]"} +{"level":"info","component":"server","time":"2024-12-15T15:02:38+08:00","caller":"ioc/server/server.go:76","message":"loaded apis: [blogs.v1 tokens.v1]"} +{"level":"info","component":"server","time":"2024-12-15T15:02:38+08:00","caller":"ioc/server/server.go:77","message":"loaded defaults: []"} +{"level":"info","component":"http","time":"2024-12-15T15:02:38+08:00","caller":"config/http/http.go:144","message":"HTTP服务启动成功, 监听地址: 127.0.0.1:8080"} +{"level":"error","component":"http","time":"2024-12-15T15:02:38+08:00","caller":"config/http/http.go:146","message":"listen tcp 127.0.0.1:8080: bind: address already in use"} +{"level":"info","component":"server","time":"2024-12-15T15:04:51+08:00","caller":"ioc/server/server.go:101","message":"receive signal 'interrupt', start graceful shutdown"} +{"level":"info","component":"http","time":"2024-12-15T15:04:51+08:00","caller":"config/http/http.go:152","message":"start graceful shutdown"} +{"level":"info","component":"server","time":"2024-12-15T15:04:51+08:00","caller":"ioc/server/server.go:115","message":"http service stop complete"} +{"level":"info","component":"gin_webframework","time":"2024-12-15T15:04:52+08:00","caller":"config/gin/framework.go:41","message":"enable gin recovery"} +{"level":"info","component":"server","time":"2024-12-15T15:04:52+08:00","caller":"ioc/server/server.go:74","message":"loaded configs: [app.v1 trace.v1 log.v1 validator.v1 gin_webframework.v1 datasource.v1 grpc.v1 http.v1]"} +{"level":"info","component":"server","time":"2024-12-15T15:04:52+08:00","caller":"ioc/server/server.go:75","message":"loaded controllers: [token.v1 user.v1 blog.v1]"} +{"level":"info","component":"server","time":"2024-12-15T15:04:52+08:00","caller":"ioc/server/server.go:76","message":"loaded apis: [blogs.v1 tokens.v1]"} +{"level":"info","component":"server","time":"2024-12-15T15:04:52+08:00","caller":"ioc/server/server.go:77","message":"loaded defaults: []"} +{"level":"info","component":"http","time":"2024-12-15T15:04:52+08:00","caller":"config/http/http.go:144","message":"HTTP服务启动成功, 监听地址: 127.0.0.1:8080"} +{"level":"error","component":"http","time":"2024-12-15T15:04:52+08:00","caller":"config/http/http.go:146","message":"listen tcp 127.0.0.1:8080: bind: address already in use"} +{"level":"info","component":"server","time":"2024-12-15T15:05:12+08:00","caller":"ioc/server/server.go:101","message":"receive signal 'interrupt', start graceful shutdown"} +{"level":"info","component":"http","time":"2024-12-15T15:05:12+08:00","caller":"config/http/http.go:152","message":"start graceful shutdown"} +{"level":"error","component":"http","time":"2024-12-15T15:05:12+08:00","caller":"config/http/http.go:146","message":"http: Server closed"} +{"level":"info","component":"server","time":"2024-12-15T15:05:12+08:00","caller":"ioc/server/server.go:115","message":"http service stop complete"} +{"level":"info","component":"server","time":"2024-12-15T15:05:22+08:00","caller":"ioc/server/server.go:101","message":"receive signal 'interrupt', start graceful shutdown"} +{"level":"info","component":"http","time":"2024-12-15T15:05:22+08:00","caller":"config/http/http.go:152","message":"start graceful shutdown"} +{"level":"info","component":"server","time":"2024-12-15T15:05:22+08:00","caller":"ioc/server/server.go:115","message":"http service stop complete"} +{"level":"info","component":"gin_webframework","time":"2024-12-15T15:05:24+08:00","caller":"config/gin/framework.go:41","message":"enable gin recovery"} +{"level":"info","component":"server","time":"2024-12-15T15:05:24+08:00","caller":"ioc/server/server.go:74","message":"loaded configs: [app.v1 trace.v1 log.v1 validator.v1 gin_webframework.v1 datasource.v1 grpc.v1 http.v1]"} +{"level":"info","component":"server","time":"2024-12-15T15:05:24+08:00","caller":"ioc/server/server.go:75","message":"loaded controllers: [token.v1 user.v1 blog.v1]"} +{"level":"info","component":"server","time":"2024-12-15T15:05:24+08:00","caller":"ioc/server/server.go:76","message":"loaded apis: [blogs.v1 tokens.v1]"} +{"level":"info","component":"server","time":"2024-12-15T15:05:24+08:00","caller":"ioc/server/server.go:77","message":"loaded defaults: []"} +{"level":"info","component":"http","time":"2024-12-15T15:05:24+08:00","caller":"config/http/http.go:144","message":"HTTP服务启动成功, 监听地址: 127.0.0.1:8080"} +{"level":"debug","time":"2024-12-15T15:05:42+08:00","caller":"token/api/api.go:57","message":"cookie domain: 127.0.0.1"} +{"level":"info","component":"server","time":"2024-12-15T15:06:50+08:00","caller":"ioc/server/server.go:101","message":"receive signal 'interrupt', start graceful shutdown"} +{"level":"info","component":"http","time":"2024-12-15T15:06:50+08:00","caller":"config/http/http.go:152","message":"start graceful shutdown"} +{"level":"error","component":"http","time":"2024-12-15T15:06:50+08:00","caller":"config/http/http.go:146","message":"http: Server closed"} +{"level":"info","component":"server","time":"2024-12-15T15:06:50+08:00","caller":"ioc/server/server.go:115","message":"http service stop complete"} +{"level":"info","component":"gin_webframework","time":"2024-12-15T15:06:52+08:00","caller":"config/gin/framework.go:41","message":"enable gin recovery"} +{"level":"info","component":"server","time":"2024-12-15T15:06:52+08:00","caller":"ioc/server/server.go:74","message":"loaded configs: [app.v1 trace.v1 log.v1 validator.v1 gin_webframework.v1 datasource.v1 grpc.v1 http.v1]"} +{"level":"info","component":"server","time":"2024-12-15T15:06:52+08:00","caller":"ioc/server/server.go:75","message":"loaded controllers: [token.v1 user.v1 blog.v1]"} +{"level":"info","component":"server","time":"2024-12-15T15:06:52+08:00","caller":"ioc/server/server.go:76","message":"loaded apis: [blogs.v1 tokens.v1]"} +{"level":"info","component":"server","time":"2024-12-15T15:06:52+08:00","caller":"ioc/server/server.go:77","message":"loaded defaults: []"} +{"level":"info","component":"http","time":"2024-12-15T15:06:52+08:00","caller":"config/http/http.go:144","message":"HTTP服务启动成功, 监听地址: 127.0.0.1:8080"} +{"level":"debug","time":"2024-12-15T15:06:56+08:00","caller":"token/api/api.go:57","message":"cookie domain: 127.0.0.1"} +{"level":"info","component":"server","time":"2024-12-15T15:09:35+08:00","caller":"ioc/server/server.go:101","message":"receive signal 'interrupt', start graceful shutdown"} +{"level":"info","component":"http","time":"2024-12-15T15:09:35+08:00","caller":"config/http/http.go:152","message":"start graceful shutdown"} +{"level":"error","component":"http","time":"2024-12-15T15:09:35+08:00","caller":"config/http/http.go:146","message":"http: Server closed"} +{"level":"info","component":"server","time":"2024-12-15T15:09:35+08:00","caller":"ioc/server/server.go:115","message":"http service stop complete"} +{"level":"info","component":"gin_webframework","time":"2024-12-15T15:09:37+08:00","caller":"config/gin/framework.go:41","message":"enable gin recovery"} +{"level":"info","component":"server","time":"2024-12-15T15:09:37+08:00","caller":"ioc/server/server.go:74","message":"loaded configs: [app.v1 trace.v1 log.v1 validator.v1 gin_webframework.v1 datasource.v1 grpc.v1 http.v1]"} +{"level":"info","component":"server","time":"2024-12-15T15:09:37+08:00","caller":"ioc/server/server.go:75","message":"loaded controllers: [token.v1 user.v1 blog.v1]"} +{"level":"info","component":"server","time":"2024-12-15T15:09:37+08:00","caller":"ioc/server/server.go:76","message":"loaded apis: [blogs.v1 tokens.v1]"} +{"level":"info","component":"server","time":"2024-12-15T15:09:37+08:00","caller":"ioc/server/server.go:77","message":"loaded defaults: []"} +{"level":"info","component":"http","time":"2024-12-15T15:09:37+08:00","caller":"config/http/http.go:144","message":"HTTP服务启动成功, 监听地址: 127.0.0.1:8080"} +{"level":"info","component":"server","time":"2024-12-15T15:10:29+08:00","caller":"ioc/server/server.go:101","message":"receive signal 'interrupt', start graceful shutdown"} +{"level":"info","component":"http","time":"2024-12-15T15:10:29+08:00","caller":"config/http/http.go:152","message":"start graceful shutdown"} +{"level":"error","component":"http","time":"2024-12-15T15:10:29+08:00","caller":"config/http/http.go:146","message":"http: Server closed"} +{"level":"info","component":"server","time":"2024-12-15T15:10:29+08:00","caller":"ioc/server/server.go:115","message":"http service stop complete"} diff --git a/vblog/main.go b/vblog/main.go index 0741504..851f872 100644 --- a/vblog/main.go +++ b/vblog/main.go @@ -1,18 +1,26 @@ package main import ( - "log" + "github.com/infraboard/mcube/v2/ioc/server/cmd" - "github.com/infraboard/mcube/v2/ioc/config/http" - "gitlab.com/go-course-project/go17/vblog/config" - "gitlab.com/go-course-project/go17/vblog/server" + // 导入程序所有的对 + _ "gitlab.com/go-course-project/go17/vblog/apps" ) func main() { - config.LoadConfig() + // config.LoadConfig() - // 服务器启动 - if err := server.GinServer.Run(http.Get().Addr()); err != nil { - log.Println(err) - } + // // // http server ioc + // // // 服务器启动 + // // if err := server.GinServer.Run(http.Get().Addr()); err != nil { + // // log.Println(err) + // // } + + // config Load config and run + // if err := server.Run(context.Background()); err != nil { + // panic(err) + // } + + // load config and run with cobra cli + cmd.Start() } diff --git a/vblog/middleware/auth.go b/vblog/middleware/auth.go index 73428c6..8cc19de 100644 --- a/vblog/middleware/auth.go +++ b/vblog/middleware/auth.go @@ -8,6 +8,7 @@ import ( "github.com/gin-gonic/gin" "github.com/infraboard/mcube/v2/exception" "github.com/infraboard/mcube/v2/http/gin/response" + "github.com/infraboard/mcube/v2/ioc/config/log" "gitlab.com/go-course-project/go17/vblog/apps/token" ) @@ -27,6 +28,17 @@ func Auth(c *gin.Context) { if len(tkList) == 2 { accessToken = tkList[1] } + + // 再尝试从cookie中获取 + if accessToken == "" { + tc, err := c.Cookie(token.COOKIE_NAME) + if err != nil { + log.L().Error().Msgf("get cookie error, %s", err) + } else { + accessToken = tc + } + } + // 2. 校验Token tk, err := token.GetService().ValidateToken(c.Request.Context(), token.NewValidateTokenRequest(accessToken)) if err != nil { diff --git a/vblog/server/server.go b/vblog/server/server.go deleted file mode 100644 index ceecbde..0000000 --- a/vblog/server/server.go +++ /dev/null @@ -1,8 +0,0 @@ -package server - -import "github.com/gin-gonic/gin" - -var ( - // gin Engine, 它包装了http server - GinServer = gin.Default() -) diff --git a/vblog/config/README.md b/vblog/test/README.md similarity index 100% rename from vblog/config/README.md rename to vblog/test/README.md diff --git a/vblog/config/setup.go b/vblog/test/setup.go similarity index 94% rename from vblog/config/setup.go rename to vblog/test/setup.go index 9261606..f235a54 100644 --- a/vblog/config/setup.go +++ b/vblog/test/setup.go @@ -1,4 +1,4 @@ -package config +package test import ( "os" @@ -9,6 +9,7 @@ import ( _ "gitlab.com/go-course-project/go17/vblog/apps" ) +// 给单测使用的 func LoadConfig() { // 配置单元单元测试的配置, application.toml req := ioc.NewLoadConfigRequest()