golang轻量级中间件库插件rye支持JWT和CORS功能
Golang轻量级中间件库插件rye支持JWT和CORS功能
⚠️ 注意:该项目已不再积极维护。
简介
rye是一个简单的支持HTTP服务的库。它提供了一个中间件处理器,可以用来链式调用HTTP处理器,同时为DataDog等日志聚合器提供statsd指标统计。此外,rye还内置了各种预建的中间件处理器,支持CORS和速率/CIDR限制等功能。
主要特性
- 非常轻量 - 核心库仅约143行代码(包括注释)
- 每个中间件自动获得statsd指标跟踪,包括错误计数器
- 灵活的中间件组合方式
- 统一的JSON响应标准化方法
- 内置CORS等常用中间件支持
安装
import (
"github.com/cactus/go-statsd-client/statsd"
"github.com/InVisionApp/rye"
)
JWT和CORS中间件示例
package main
import (
"fmt"
"log"
"net/http"
"github.com/cactus/go-statsd-client/statsd"
"github.com/InVisionApp/rye"
"github.com/gorilla/mux"
)
const DEFAULT_STATSD_RATE = 1.0
func main() {
// 创建statsd客户端
statsdClient, err := statsd.NewClient("127.0.0.1:8125", "myapp")
if err != nil {
log.Fatal(err)
}
defer statsdClient.Close()
// 配置rye
config := &rye.Config{
Statter: statsdClient,
StatRate: DEFAULT_STATSD_RATE,
}
// 创建中间件处理器
middlewareHandler := rye.NewMWHandler(config)
// 使用全局中间件
middlewareHandler.Use(rye.MiddlewareRouteLogger())
// 创建路由器
r := mux.NewRouter()
// 添加路由 - 使用CORS和JWT中间件
r.Handle("/api", middlewareHandler.Handle([]rye.Handler{
rye.NewMiddlewareCORS("*", "GET, POST", "Authorization"), // CORS中间件
rye.MiddlewareJWT("your-secret-key"), // JWT中间件
apiHandler, // 实际API处理器
})).Methods("GET", "POST")
// 启动服务器
log.Println("Server starting on :8080...")
log.Fatal(http.ListenAndServe(":8080", r))
}
// API处理器示例
func apiHandler(rw http.ResponseWriter, r *http.Request) *rye.Response {
// 从上下文中获取JWT
jwtToken := r.Context().Value(rye.CONTEXT_JWT)
if jwtToken == nil {
return &rye.Response{
StatusCode: http.StatusUnauthorized,
Err: fmt.Errorf("missing JWT"),
}
}
// 处理请求
fmt.Fprintf(rw, "Protected API endpoint")
return nil
}
JWT中间件说明
JWT中间件会将JWT令牌放入请求的Context中,后续中间件可以通过CONTEXT_JWT
键访问:
func getJWTfromContext(rw http.ResponseWriter, r *http.Request) *rye.Response {
// 从Context获取JWT
jwtToken := r.Context().Value(rye.CONTEXT_JWT)
// 使用JWT...
log.Printf("JWT Token: %v", jwtToken)
return nil
}
CORS中间件说明
CORS中间件可以这样使用:
// 使用默认配置
rye.MiddlewareCORS()
// 或自定义配置
rye.NewMiddlewareCORS(
"*", // 允许的源
"GET, POST, PUT", // 允许的方法
"Authorization, X-My-Header" // 允许的头部
)
中间件列表
名称 | 描述 |
---|---|
Access Token | 提供访问令牌验证 |
CIDR | 提供请求IP白名单 |
CORS | 为路由提供CORS功能 |
JWT | 提供JWT验证 |
Route Logger | 为路由提供基本日志记录 |
注意事项
- 项目已不再积极维护
- 核心库非常轻量
- 内置了对statsd的支持
- 支持Golang 1.7+的Context功能
希望这个示例能帮助你了解如何使用rye的JWT和CORS功能!
更多关于golang轻量级中间件库插件rye支持JWT和CORS功能的实战教程也可以访问 https://www.itying.com/category-94-b0.html
更多关于golang轻量级中间件库插件rye支持JWT和CORS功能的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html
Rye: Golang轻量级中间件库插件
Rye是一个轻量级的Go中间件库,它提供了简单易用的中间件功能,包括JWT认证和CORS支持。下面我将详细介绍rye的这两个核心功能以及如何使用它们。
Rye简介
Rye是一个微型的Go中间件库,它的设计目标是简单、轻量且易于使用。它不依赖任何外部库,非常适合小型项目或需要精简中间件的场景。
JWT认证
Rye提供了JWT(JSON Web Token)认证中间件,可以方便地保护你的API端点。
基本用法
package main
import (
"net/http"
"github.com/InVisionApp/rye"
)
func main() {
// 创建JWT配置
jwtConfig := rye.Config{
JWTSecret: "your-secret-key", // 替换为你的密钥
JWTIssuer: "your-app", // 可选: 签发者
JWTIdent: "user-id", // 可选: 用户标识字段名
JWTPrefix: "Bearer", // 可选: token前缀
JWTRedisHost: "", // 可选: Redis主机(如果需要Redis验证)
JWTRedisDB: 0, // 可选: Redis数据库
JWTRedisNamespace: "", // 可选: Redis命名空间
}
// 创建JWT中间件
jwtMiddleware := rye.NewJWTMiddleware(jwtConfig)
// 受保护的路由
protectedHandler := http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
// 从上下文中获取用户ID
userID := r.Context().Value("user-id").(string)
w.Write([]byte("Hello, " + userID))
})
// 应用中间件
http.Handle("/protected", jwtMiddleware.Handler(protectedHandler))
// 启动服务器
http.ListenAndServe(":8080", nil)
}
自定义验证
你可以自定义JWT验证逻辑:
jwtMiddleware := rye.NewJWTMiddleware(jwtConfig).WithValidation(func(token *jwt.Token) (bool, error) {
// 自定义验证逻辑
if claims, ok := token.Claims.(jwt.MapClaims); ok {
if claims["role"] != "admin" {
return false, nil
}
}
return true, nil
})
CORS支持
Rye提供了简单的CORS(跨域资源共享)中间件,可以轻松处理跨域请求。
基本用法
package main
import (
"net/http"
"github.com/InVisionApp/rye"
)
func main() {
// 创建CORS中间件
corsMiddleware := rye.NewCorsMiddleware(rye.CorsConfig{
AllowedOrigins: []string{"*"}, // 允许的源
AllowedMethods: []string{"GET", "POST", "OPTIONS"}, // 允许的方法
AllowedHeaders: []string{"Content-Type"}, // 允许的头部
AllowCredentials: true, // 是否允许凭据
MaxAge: 86400, // 预检请求缓存时间(秒)
})
// 示例处理程序
handler := http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
w.Write([]byte("Hello, CORS!"))
})
// 应用中间件
http.Handle("/", corsMiddleware.Handler(handler))
// 启动服务器
http.ListenAndServe(":8080", nil)
}
动态CORS配置
你可以根据请求动态配置CORS:
corsMiddleware := rye.NewCorsMiddleware(rye.CorsConfig{
// 基本配置
}).WithOriginValidator(func(origin string) bool {
// 自定义源验证逻辑
return strings.HasSuffix(origin, ".example.com")
})
组合使用JWT和CORS
在实际应用中,你通常会同时使用多个中间件:
package main
import (
"net/http"
"github.com/InVisionApp/rye"
)
func main() {
// JWT配置
jwtConfig := rye.Config{
JWTSecret: "your-secret-key",
}
jwtMiddleware := rye.NewJWTMiddleware(jwtConfig)
// CORS配置
corsMiddleware := rye.NewCorsMiddleware(rye.CorsConfig{
AllowedOrigins: []string{"*"},
AllowedMethods: []string{"GET", "POST", "OPTIONS"},
})
// 受保护的处理程序
protectedHandler := http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
userID := r.Context().Value("user-id").(string)
w.Write([]byte("Hello, " + userID))
})
// 创建中间件链
// 注意顺序: CORS应该在最外层
handlerChain := corsMiddleware.Handler(
jwtMiddleware.Handler(protectedHandler),
)
http.Handle("/api", handlerChain)
http.ListenAndServe(":8080", nil)
}
优势与限制
优势
- 轻量级,无外部依赖
- 简单易用的API
- 支持基本的JWT和CORS功能
- 可扩展的验证逻辑
限制
- 功能相对基础,缺少一些高级特性
- 文档和社区支持较少
- 不如一些更成熟的库(如gorilla/mux)功能丰富
总结
Rye是一个适合小型项目的轻量级中间件库,特别是当你只需要基本的JWT和CORS功能时。它的简单性和无依赖性使其成为精简项目的良好选择。对于更复杂的需求,你可能需要考虑更全面的解决方案如Gin或Echo框架的内置中间件。