server.go 3.4 KB

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