server.go 3.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116
  1. package server1
  2. import (
  3. "context"
  4. "github.com/goflyfox/gtoken/gtoken"
  5. "github.com/gogf/gf/v2/container/gvar"
  6. "github.com/gogf/gf/v2/frame/g"
  7. "github.com/gogf/gf/v2/net/ghttp"
  8. "github.com/gogf/gf/v2/os/gcfg"
  9. )
  10. var TestServerName string
  11. //var TestServerName string = "gtoken"
  12. var server *ghttp.Server
  13. func Start() {
  14. ctx := context.TODO()
  15. g.Log().Info(ctx, "########service start...")
  16. if fileConfig, ok := g.Cfg().GetAdapter().(*gcfg.AdapterFile); ok {
  17. fileConfig.SetPath("../config")
  18. }
  19. server = g.Server(TestServerName)
  20. initRouter(server)
  21. g.Log().Info(ctx, "########service finish.")
  22. server.Start()
  23. }
  24. func Stop() {
  25. server.Shutdown()
  26. }
  27. var gfToken *gtoken.GfToken
  28. /*
  29. 统一路由注册
  30. */
  31. func initRouter(s *ghttp.Server) {
  32. s.Group("/", func(group *ghttp.RouterGroup) {
  33. group.Middleware(CORS)
  34. // 调试路由
  35. group.ALL("/hello", func(r *ghttp.Request) {
  36. r.Response.WriteJson(gtoken.Succ("hello"))
  37. })
  38. // 获取登录扩展属性
  39. group.ALL("/system/data", func(r *ghttp.Request) {
  40. r.Response.WriteJson(gfToken.GetTokenData(r).Data)
  41. })
  42. group.ALL("/system/user", func(r *ghttp.Request) {
  43. r.Response.WriteJson(gtoken.Succ("system user"))
  44. })
  45. group.ALL("/user/info", func(r *ghttp.Request) {
  46. r.Response.WriteJson(gtoken.Succ("user info"))
  47. })
  48. group.ALL("/system/user/info", func(r *ghttp.Request) {
  49. r.Response.WriteJson(gtoken.Succ("system user info"))
  50. })
  51. })
  52. loginFunc := Login
  53. ctx := context.TODO()
  54. // 启动gtoken
  55. gfToken = &gtoken.GfToken{
  56. ServerName: TestServerName,
  57. //Timeout: 10 * 1000,
  58. CacheMode: CfgGet(ctx, "gToken.CacheMode").Int8(),
  59. CacheKey: CfgGet(ctx, "gToken.CacheKey").String(),
  60. Timeout: CfgGet(ctx, "gToken.Timeout").Int(),
  61. MaxRefresh: CfgGet(ctx, "gToken.MaxRefresh").Int(),
  62. TokenDelimiter: CfgGet(ctx, "gToken.TokenDelimiter").String(),
  63. EncryptKey: CfgGet(ctx, "gToken.EncryptKey").Bytes(),
  64. AuthFailMsg: CfgGet(ctx, "gToken.AuthFailMsg").String(),
  65. MultiLogin: CfgGet(ctx, "gToken.MultiLogin").Bool(),
  66. LoginPath: "/login",
  67. LoginBeforeFunc: loginFunc,
  68. LogoutPath: "/user/logout",
  69. AuthPaths: g.SliceStr{"/user", "/system"}, // 这里是按照前缀拦截,拦截/user /user/list /user/add ...
  70. AuthExcludePaths: g.SliceStr{"/user/info", "/system/user/info"}, // 不拦截路径 /user/info,/system/user/info,/system/user,
  71. GlobalMiddleware: true, // 开启全局拦截
  72. }
  73. err := gfToken.Start()
  74. if err != nil {
  75. panic(err)
  76. }
  77. }
  78. func CfgGet(ctx context.Context, name string) *gvar.Var {
  79. gVar, _ := g.Config().Get(ctx, name)
  80. return gVar
  81. }
  82. func Login(r *ghttp.Request) (string, interface{}) {
  83. username := r.Get("username").String()
  84. passwd := r.Get("passwd").String()
  85. if username == "" || passwd == "" {
  86. r.Response.WriteJson(gtoken.Fail("账号或密码错误."))
  87. r.ExitAll()
  88. }
  89. // 唯一标识,扩展参数user data
  90. return username, "1"
  91. }
  92. // 跨域
  93. func CORS(r *ghttp.Request) {
  94. r.Response.CORSDefault()
  95. r.Middleware.Next()
  96. }