本文展示了Go语言实现的Java平台功能,主要包括用户令牌管理和权限验证。通过Goplatform
结构体实现令牌获取、用户信息查询等功能,使用Redis存储会话数据。CheckToken
方法验证请求头中的access-token有效性,Query
方法演示了如何在实际业务中应用令牌验证。代码示例包含完整的ErpUser用户模型定义和基于Gin框架的API接口实现,展示了从请求处理到Redis数据操作的全流程。
java实现
现在新功能使用go
package javaplatform import ( "context" "gitee.com/gowebframe/webframe/goconfig/base/basedto" "gitee.com/gowebframe/webframe/goconfig/ichublog/golog" "gitee.com/gowebframe/webframe/goconfig/ichubredis" "gitee.com/gowebframe/webframe/goweb/pagemodel" "github.com/gin-gonic/gin" "goapi/domain/service/apimodel" "github.com/gogf/gf/v2/container/gvar" ) type Goplatform struct { basedto.BaseEntitySingle } func NewGoplatform() *Goplatform { return &Goplatform{} } func (self *Goplatform) tokenKey(token string) string { return "session:mgr:" + token } func (self *Goplatform) GetToken(token string) string { return self.GetTokenUser(token).String() } func (self *Goplatform) GetTokenUser(token string) *gvar.Var { key := self.tokenKey(token) value, err := ichubredis.FindBeanGredisClient().Redis.HGet(context.Background(), key, "user") if err != nil { golog.Error(err, value) } return value } func (self *Goplatform) GetTokenUser2Result(token string) *pagemodel.IchubResult[*apimodel.ErpUser] { key := self.tokenKey(token) value, err := ichubredis.FindBeanGredisClient().Redis.HGet(context.Background(), key, "user") if err != nil { golog.Error(err, value) } var ret = pagemodel.DefaultIchubResult[*apimodel.ErpUser]() if value != nil && value.String() != "" { ret.Data = apimodel.NewErpUser().FromJson(value.Bytes()).(*apimodel.ErpUser) ret.Exist = true } return ret } func (self *Goplatform) GetToken2Result(ctx *gin.Context) *pagemodel.IchubResult[*apimodel.ErpUser] { var token = ctx.GetHeader("access-token") return self.GetTokenUser2Result(token) } func (self *Goplatform) CheckToken(ctx *gin.Context) bool { var token = ctx.GetHeader("access-token") if token == "" { return false } return self.GetToken2Result(ctx).Exist }
package apimodel import "gitee.com/gowebframe/webframe/goconfig/base/basedto" type ErpUser struct { basedto.BaseEntity Class string `json:"@class"` Id int `json:"id"` Username string `json:"username"` Passwd string `json:"passwd"` Realname string `json:"realname"` CorpId int `json:"corpId"` OrgId int `json:"orgId"` MobileNo string `json:"mobileNo"` Email string `json:"email"` Status int `json:"status"` Remark string `json:"remark"` CreateBy int `json:"createBy"` CreateOn []interface{} `json:"createOn"` OpBy int `json:"opBy"` OpOn []interface{} `json:"opOn"` ExtParams string `json:"extParams"` SysOrg interface{} `json:"sysOrg"` SysRoles interface{} `json:"sysRoles"` } func NewErpUser() *ErpUser { var u = &ErpUser{} u.InitProxy(u) return u }
// @Summary Query // @Tags 部门服务 // @Produce json // @Param Access-Token header string true "鉴权Token" // @Param body body uibase.UiPageRequest true "请求参数" // @Success 200 {object} uibase.UiPageResult "成功" // @Failure 400 {object} string "请求错误" // @Failure 500 {object} string "内部错误" // @Router /dept/query [post] func (this *DeptFuncService) Query(ctx *gin.Context) { if exist := javaplatform.FindBeanGoplatform().CheckToken(ctx); !exist { golog.Error("token过期或者空,请登录!") ctx.IndentedJSON(200, basedto.ResultFailMsg("请登录")) return } var req = uibase.FindBeanUiPageRequest() var err = this.ParseBodyOnly(ctx, req) if err != nil { golog.Error("dept Query ParseBodyOnly err:", err) } var ret = uidto.FindBeanDeptRequest().UiQueryResult(req) if ret.IsFailed() { golog.Error("dept Query ret:", ret) } ctx.IndentedJSON(200, ret) }