feat(http): make trailing-slash redirect configurable

This commit is contained in:
ryan
2026-08-30 11:07:22 +08:00
parent b8ad06f49f
commit b4c4b0a27e
3 changed files with 34 additions and 0 deletions
@@ -15,6 +15,7 @@ type httpAppConfig struct {
SessionAge int `config:"session_age" env:"APP_SESSION_AGE" default:"86400"`
SessionHTTPOnly bool `config:"session_http_only" env:"APP_SESSION_HTTP_ONLY" default:"true"`
SessionSecure bool `config:"session_secure" env:"APP_SESSION_SECURE"`
RedirectTrailingSlash *bool `config:"redirect_trailing_slash" env:"APP_REDIRECT_TRAILING_SLASH"`
}
type httpRedisConfig struct {
@@ -31,6 +31,11 @@ func BuildEngineWithConfig(appCfg httpAppConfig, redisCfg httpRedisConfig) (*gin
// 初始化路由
r := gin.New()
redirect := true
if appCfg.RedirectTrailingSlash != nil {
redirect = *appCfg.RedirectTrailingSlash
}
r.RedirectTrailingSlash = redirect
r.Use(gin.Recovery())
r.Use(corsMiddleware())
@@ -0,0 +1,28 @@
// Copyright 2026 Arctel.net
// SPDX-License-Identifier: Apache-2.0
package driver_http
import "testing"
func TestBuildEngineDefaultRedirectsTrailingSlash(t *testing.T) {
eng, err := BuildEngineWithConfig(httpAppConfig{}, httpRedisConfig{})
if err != nil {
t.Fatal(err)
}
if !eng.RedirectTrailingSlash {
t.Fatal("default RedirectTrailingSlash must be true")
}
}
func TestBuildEngineCanDisableRedirectTrailingSlash(t *testing.T) {
eng, err := BuildEngineWithConfig(httpAppConfig{RedirectTrailingSlash: boolPtr(false)}, httpRedisConfig{})
if err != nil {
t.Fatal(err)
}
if eng.RedirectTrailingSlash {
t.Fatal("RedirectTrailingSlash must honor false")
}
}
func boolPtr(v bool) *bool { return &v }