大佬教程收集整理的这篇文章主要介绍了XGoServer 一个基础性、模块完整且安全可靠的服务端框架,大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
一个基础性、模块完整且安全可靠的服务端框架
jwt
cipher-AES
,可自行拓展其他jwt
cipher-AES
,可自行拓展其他alecthomas/log4go
gorilla/mux
xorm
框架requireToken
标识该路由是否需要 token
验证
TokenData
是我们要组合到 token
里面的数据结构 struct
type Context struct {
TokenData TokenData
TokenStr String `json:"tokenStr"`
Ipaddress String `json:"ipaddress"` // client 的 ip
RoutePath String `json:"routePath"`
}
type XHandler struct {
handleFunc func(*Context,http.ResponseWriter,*http.request)
requireToken bool
}
func (x XHandler) Servehttp(w http.ResponseWriter,r *http.request) {
tokenStr := r.Header.Get(TokenAuth)
c := &Context{}
c.Ipaddress = util.GetIpaddress(r)
c.RoutePath = r.URl.Path
if x.requireToken {
tokenData,err := ParseToken(tokenStr) // 使用 token 模块进行解析
if err != nil {
util.RenderJson(w,util.GetCommonErr(err.Error()))
return
}
c.TokenData = *tokenData
c.TokenStr = tokenStr
// util.RenderJson(w,C)
x.handleFunc(c,w,r)
return
}
// 不需要 token
util.LogInterface(C)
x.handleFunc(c,r)
}
core.ApiNormalHandler(getToken)
).Methods("GET")core.ApirequestTokenHandler(handleToken)
).Methods("GET")router.Handle("/getToken",core.ApiNormalHandler(getToken)).Methods("GET")
router.Handle("/handleToken",core.ApirequestTokenHandler(handleToken)).Methods("GET")
router.HandleFunc("/enc",encOutput).Methods("GET")
router.HandleFunc("/dec",decOutput).Methods("POST")
func main() {
router := new (mux.Router)
router.HandleFunc("/",test2).Methods("GET")
core.httpListen(router)
}
func test2(w http.ResponseWriter,r *http.request) {
// 非常简单的例子,操作放在内部,可以使用 request 来获取自己的参数,再直接组织输出
core.HandlerMapWithOutputJson(w,func() map[String]interface{} {
m := map[String]interface{}{}
m["msg"] = "blow me a kiss"
return m
})
}
// 结果 : {"msg":"blow me a kiss"}
func getToken(c *core.Context,w http.ResponseWriter,r *http.request) {
core.HandlerMapWithOutputJson(w,func() map[String]interface{} {
tokenStr,err := core.buildDefaultToken(func(tokenData *core.TokenData) {
tokenData.UserId = "123456" // 用户 id
tokenData.Roles = "normal" // 用户角色
})
if err != nil {
return util.GetCommonErr(err.Error())
}
return util.GetCommonsuccess(tokenStr)
})
}
结果:
{
"msg": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VyX2lkIjoiMTIzNDU2Iiwicm9sZXMiOiJub3JtYWwiLCJwcm9wcyI6bnVsbCwiZXhwIjoxNTE5MDA2Njg4LCJpYXQiOje1MTkwMDY2Mjh9.NsBsQ3xpOJNZUXO5Dc-Yk4p4m6p4EeDWgEfc5BaNKd4","ret": "success"
}
tokenStr 是 Context 一变量
handleToken 方法对于的是 ApirequestTokenHandler
func handleToken(c *core.Context,r *http.request) {
util.RenderJson(w,context)
}
tokenStr 是 Context 一变量
handleToken 方法对于的是 ApirequestTokenHandler
type IEncrypt interface {
AesEncrypt(origData,key []bytE) ([]byte,error) // 加密
AesDecrypt(encrypted,error) // 解密
}
// 加密输出
func encOutput(w http.ResponseWriter,func() map[String]interface{} {
d := "狗年平安"
aes := encrypt.DefaultAES{}
return util.GetCommonsuccess(aes.AesEncryptStr(d))
})
}
输出:
{
"msg": "\ufffd\u0002\ufffd\u001eu\ufffd\u001c\ufffd\u0013m\ufffdM\\\ufffd\ufffd\u0011","ret": "success"
}
func test3(w http.ResponseWriter,func() map[String]interface{} {
// 插入一条评论
item := &model.Comment{
Id :util.NewId(),// 评论 id
UserId :"123456",// 评论人 id
Name :"LinGuanHong",// 评论人名称
Content :"Hello word",// 评论内容
}
affect,_ := core.ENGIne.Insert(item) // 执行插入,传入 struct 引用
m := map[String]interface{}{}
if affect > 0 {
m["ret"] = "insert success"
comments := make([]model.Comment,0)
core.ENGIne.Find(&comments) // SELEct 出来,获取所有评论输出
m["msg"] = comments
}else{
m["ret"] = "insert Failed"
}
return m
})
}
输出的结果是:
{
"msg": [
{
"id": "1kubpgh9pprrucy11e456fyytw","UserId": "123456","name": "LinGuanHong","content": "Hello word"
}
],"ret": "insert success"
}
以上是大佬教程为你收集整理的XGoServer 一个基础性、模块完整且安全可靠的服务端框架全部内容,希望文章能够帮你解决XGoServer 一个基础性、模块完整且安全可靠的服务端框架所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。