- 在客户端添加首页路由的认证逻辑,提高用户体验 - 优化静态资源服务配置,增强安全性 - 添加 URL 解析和保存功能,为后续的路由认证做准备 - 调整中间件顺序和配置,提升应用性能和安全性
32 lines
711 B
Go
32 lines
711 B
Go
package middleware
|
|
|
|
import (
|
|
"net/url"
|
|
"path/filepath"
|
|
"strings"
|
|
|
|
"github.com/gin-contrib/sessions"
|
|
"github.com/gin-gonic/gin"
|
|
)
|
|
|
|
func RouteAuthMiddleware() gin.HandlerFunc {
|
|
return func(c *gin.Context) {
|
|
requestPath := c.Request.URL.Path
|
|
|
|
// 如果路径没有后缀(不是静态资源)或以斜杠结尾,且不在白名单中,需要认证
|
|
if filepath.Ext(requestPath) == "" || strings.HasSuffix(requestPath, "/") {
|
|
session := sessions.Default(c)
|
|
user := session.Get("user")
|
|
if user == nil {
|
|
returnURL := c.Request.URL.String()
|
|
encodedURL := url.QueryEscape(returnURL)
|
|
c.Redirect(302, "/login?return_url="+encodedURL)
|
|
c.Abort()
|
|
return
|
|
}
|
|
}
|
|
|
|
c.Next()
|
|
}
|
|
}
|