补充Set Cookie

This commit is contained in:
yumaojun03 2024-12-15 15:10:44 +08:00
parent 60320a9861
commit ed5734c9c4
17 changed files with 402 additions and 47 deletions

23
vblog/Makefile Normal file
View File

@ -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}'

View File

@ -381,3 +381,116 @@ func main() {
} }
} }
``` ```
修改为使用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/
// 路径构成规则 <service_name>/<path_prefix>/<service_version>/<module_name>
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

View File

@ -6,7 +6,9 @@ import (
"github.com/infraboard/mcube/v2/ioc" "github.com/infraboard/mcube/v2/ioc"
"gitlab.com/go-course-project/go17/vblog/apps/blog" "gitlab.com/go-course-project/go17/vblog/apps/blog"
"gitlab.com/go-course-project/go17/vblog/middleware" "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 blog blog.Service
} }
func (i *BlogApiHandler) Init() error { // module_name
i.blog = blog.GetService() func (h *BlogApiHandler) Name() string {
i.Registry(server.GinServer) return "blogs"
return nil
} }
// 提供注册功能, 提供一个Group // router := r.Group("/vblog/api/v1/blogs")
// book := server.Group("/api/tokens") // ioc_gin.ObjectRouter(h)
func (h *BlogApiHandler) Registry(r *gin.Engine) { // 模块的名称, 会作为路径的一部分比如: /api/mcube_service/v1/hello_module/
router := r.Group("/vblog/api/v1/blogs") // /api/xxx_service
router.GET("", h.QueryBlog) // 路径构成规则 /<path_prefix>/<service_name>/<service_version>/<module_name>
func (h *BlogApiHandler) Init() error {
h.blog = blog.GetService()
// 在ioc获取gin server *gin.Engine
ioc_gin.RootRouter()
router.Use(middleware.Auth) // 获取模块路有: url前缀,
router.POST("", h.CreateBlog) r := ioc_gin.ObjectRouter(h)
r.GET("", h.QueryBlog)
r.Use(middleware.Auth)
r.POST("", h.CreateBlog)
return nil
} }
// BODY // BODY

View File

@ -5,7 +5,7 @@ import (
"github.com/infraboard/mcube/v2/ioc/config/datasource" "github.com/infraboard/mcube/v2/ioc/config/datasource"
"gitlab.com/go-course-project/go17/vblog/apps/blog" "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) { func TestMigrate(t *testing.T) {
@ -16,5 +16,5 @@ func TestMigrate(t *testing.T) {
} }
func init() { func init() {
config.LoadConfig() test.LoadConfig()
} }

View File

@ -5,7 +5,11 @@ import (
"github.com/infraboard/mcube/v2/http/gin/response" "github.com/infraboard/mcube/v2/http/gin/response"
"github.com/infraboard/mcube/v2/ioc" "github.com/infraboard/mcube/v2/ioc"
"gitlab.com/go-course-project/go17/vblog/apps/token" "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() { func init() {
@ -18,18 +22,22 @@ type TokenApiHandler struct {
token token.UserService token token.UserService
} }
func (i *TokenApiHandler) Init() error { // router 也从ioc中 获取
i.token = token.GetService() func (h *TokenApiHandler) Init() error {
i.Registry(server.GinServer) 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 return nil
} }
// 提供注册功能, 提供一个Group func (h *TokenApiHandler) Name() string {
// book := server.Group("/api/tokens") return "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) IssueToken(ctx *gin.Context) { func (h *TokenApiHandler) IssueToken(ctx *gin.Context) {
@ -43,6 +51,14 @@ func (h *TokenApiHandler) IssueToken(ctx *gin.Context) {
response.Failed(ctx, err) response.Failed(ctx, err)
return 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) response.Success(ctx, ins)
} }

View File

@ -0,0 +1,5 @@
package token
const (
COOKIE_NAME = "token"
)

View File

@ -43,6 +43,13 @@ type Token struct {
RefUserName string `json:"ref_user_name" gorm:"-"` 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 { func (r *Token) String() string {
return pretty.ToJSON(r) return pretty.ToJSON(r)
} }

View File

@ -5,7 +5,7 @@ import (
"github.com/infraboard/mcube/v2/ioc/config/datasource" "github.com/infraboard/mcube/v2/ioc/config/datasource"
"gitlab.com/go-course-project/go17/vblog/apps/token" "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) { func TestMigrate(t *testing.T) {
@ -16,5 +16,5 @@ func TestMigrate(t *testing.T) {
} }
func init() { func init() {
config.LoadConfig() test.LoadConfig()
} }

View File

@ -5,7 +5,7 @@ import (
"github.com/infraboard/mcube/v2/ioc/config/datasource" "github.com/infraboard/mcube/v2/ioc/config/datasource"
"gitlab.com/go-course-project/go17/vblog/apps/user" "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) { func TestMigrate(t *testing.T) {
@ -16,5 +16,5 @@ func TestMigrate(t *testing.T) {
} }
func init() { func init() {
config.LoadConfig() test.LoadConfig()
} }

View File

@ -1,3 +1,8 @@
[app]
name = "vblog"
description = "app desc"
address = "http://127.0.0.1"
[http] [http]
# HTTP服务Host # HTTP服务Host
host = "127.0.0.1" host = "127.0.0.1"

20
vblog/logs/main.log Normal file
View File

@ -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"}

143
vblog/logs/vblog.log Normal file
View File

@ -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"}

View File

@ -1,18 +1,26 @@
package main package main
import ( 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/apps"
"gitlab.com/go-course-project/go17/vblog/server"
) )
func main() { func main() {
config.LoadConfig() // config.LoadConfig()
// 服务器启动 // // // http server ioc
if err := server.GinServer.Run(http.Get().Addr()); err != nil { // // // 服务器启动
log.Println(err) // // 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()
} }

View File

@ -8,6 +8,7 @@ import (
"github.com/gin-gonic/gin" "github.com/gin-gonic/gin"
"github.com/infraboard/mcube/v2/exception" "github.com/infraboard/mcube/v2/exception"
"github.com/infraboard/mcube/v2/http/gin/response" "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" "gitlab.com/go-course-project/go17/vblog/apps/token"
) )
@ -27,6 +28,17 @@ func Auth(c *gin.Context) {
if len(tkList) == 2 { if len(tkList) == 2 {
accessToken = tkList[1] 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 // 2. 校验Token
tk, err := token.GetService().ValidateToken(c.Request.Context(), token.NewValidateTokenRequest(accessToken)) tk, err := token.GetService().ValidateToken(c.Request.Context(), token.NewValidateTokenRequest(accessToken))
if err != nil { if err != nil {

View File

@ -1,8 +0,0 @@
package server
import "github.com/gin-gonic/gin"
var (
// gin Engine, 它包装了http server
GinServer = gin.Default()
)

View File

@ -1,4 +1,4 @@
package config package test
import ( import (
"os" "os"
@ -9,6 +9,7 @@ import (
_ "gitlab.com/go-course-project/go17/vblog/apps" _ "gitlab.com/go-course-project/go17/vblog/apps"
) )
// 给单测使用的
func LoadConfig() { func LoadConfig() {
// 配置单元单元测试的配置, application.toml // 配置单元单元测试的配置, application.toml
req := ioc.NewLoadConfigRequest() req := ioc.NewLoadConfigRequest()