diff --git a/dsSdsf/Business/Login/LoginController/LoginController.go b/dsSdsf/Business/Login/LoginController/LoginController.go new file mode 100644 index 00000000..8ca57190 --- /dev/null +++ b/dsSdsf/Business/Login/LoginController/LoginController.go @@ -0,0 +1,82 @@ +package LoginController + +import ( + "dsSdsf/Utils/CommonUtil" + "dsSdsf/Utils/ConfigUtil" + "dsSdsf/Utils/RedisUtil" + "dsSdsf/Utils/RsaUtil" + "encoding/base64" + "github.com/gin-gonic/gin" + "net/http" +) + +//模块的路由配置 +func Routers(r *gin.RouterGroup) { + rr := r.Group("/login") + + rr.GET("/test", test) + rr.GET("/test1", test1) + rr.POST("/doLogin", doLogin) + + return +} + +func test(c *gin.Context) { + b := "eWgaeStLsS3Kh/M2oaL3rEzndYZtk5mdnEGyKScOuD40iUnC/a4I0N6gRhNbHRrQplZixM8C0Ng8B3gsy70Abg==" + enb, _ := base64.StdEncoding.DecodeString(b) + decryptPwd, err := RsaUtil.RsaDecrypt(enb) + if err != nil { + c.JSON(http.StatusOK, gin.H{"sucess": false, "info": "无法解密!"}) + return + } + + c.JSON(http.StatusOK, gin.H{"sucess": true, "info": string(decryptPwd)}) +} + +func test1(c *gin.Context) { + + redirectUri := c.Query("redirect_uri") + + token := CommonUtil.GetUUID() + + RedisUtil.SET(token, "1", 3000) + c.SetCookie("token", token, 0, "/", "", false, true) + + c.Redirect(http.StatusMovedPermanently, redirectUri) +} + +func doLogin(c *gin.Context) { + user := c.PostForm("user") + pwd := c.PostForm("pwd") + + if user == "" || pwd == "" { + c.JSON(http.StatusOK, gin.H{"sucess": false, "info": "用户名或密码不允许为空!"}) + return + } + + //RSA解密密码 + base64Pwd, _ := base64.StdEncoding.DecodeString(pwd) + decryptPwdByte, err := RsaUtil.RsaDecrypt(base64Pwd) + if err != nil { + c.JSON(http.StatusOK, gin.H{"sucess": false, "info": "用户名或密码不正确!"}) + return + } + + //真实密码 + realPwd := string(decryptPwdByte) + //验证密码 + if realPwd != ConfigUtil.UserPwd { + c.JSON(http.StatusOK, gin.H{"sucess": false, "info": "用户名或密码不正确!"}) + return + } + + //生成token + token := CommonUtil.GetUUID() + //将token放到redis设置30分钟过期 + RedisUtil.SET(token, "1", 1800) + //写cookie + c.SetCookie("token", token, 0, "/", "", false, true) + + c.JSON(http.StatusOK, gin.H{"sucess": true, "info": "登录成功!"}) + +} diff --git a/dsSdsf/Config/Config.ini b/dsSdsf/Config/Config.ini new file mode 100644 index 00000000..972da439 --- /dev/null +++ b/dsSdsf/Config/Config.ini @@ -0,0 +1,34 @@ +[distribute] #发布功能的配置 +ip = 10.10.14.187 +port = 22 +user = root +pwd = dsideal +remotePath = /usr/local/dsMin/dsSdsf/ +localPath = E:/Work/dsMin/dsSdsf + +[mysql] +ip = 10.10.14.187 +port = 22066 +db_name = base_db_dev +user = root +pwd = DsideaL147258369 + +[redis] +ip = 10.10.14.175 +port = 18890 +db = 0 +expireTime = 86400 + +#gin服务器的端口 +[server] +port = 8006 + +# 本项目名称,用于记录日志 +[project] +project_name = dsSdsf + +[user] +user_name = admin +user_pwd = dsideal + + diff --git a/dsSdsf/Config/privateKey.txt b/dsSdsf/Config/privateKey.txt new file mode 100644 index 00000000..72a4a226 --- /dev/null +++ b/dsSdsf/Config/privateKey.txt @@ -0,0 +1,9 @@ +-----BEGIN RSA PRIVATE KEY----- +MIIBOQIBAAJBANiZGE52k8UZFFbK2hqFqnPx3H5uICIIP4+8BJD6qdmRdjxxZZ2b +0YjLagsNGJZ+w1TQZyBDxiLn3RPf6qxL2AcCAwEAAQJABAkOJ+ATrrdh5qAO4jGd +VF2sMvrQRHIM5RumpiDVa0U+tf2uvHkAUY2Lxhg1Mbwhd6xvzCshhNHM3EGp7Jdh +IQIhAP97VtscjKD7xZzKbUgyataufHd2NZrrS0OCXFIvRkh3AiEA2QmQo6Gcwbtj +CKmrfqJHq0aICzaLnRNF3bKH9fHzYPECIDEoSEQMsDphd1p90J0tpkT8edJ6mkHe +uDKbKKxfkERtAiAoU4elb7ThpkCrbmMn/10TrOJAOx1LzTXxEGgEwbT38QIgQsJO +SRVo5LE55m6bEJ8yTMUM+7L2HENYmPCD2V/yULI= +-----END RSA PRIVATE KEY----- \ No newline at end of file diff --git a/dsSdsf/Handler/LoginHandler.go b/dsSdsf/Handler/LoginHandler.go new file mode 100644 index 00000000..ab9b5af7 --- /dev/null +++ b/dsSdsf/Handler/LoginHandler.go @@ -0,0 +1,41 @@ +package Handler + +import ( + "dsSdsf/Utils/RedisUtil" + "github.com/gin-gonic/gin" + "net/http" + "strings" +) + +func LoginHandler() gin.HandlerFunc { + return func(c *gin.Context) { + requestUri := c.Request.RequestURI + + if strings.Index(requestUri, "/sdsf/login/test1") >= 0 { + //放行~ + c.Next() + return + } + + //是否需要登录,默认为true需要登录 + needLoginFlag := true + //获取cookie中的token + cookieToken, _ := c.Request.Cookie("token") + + if cookieToken != nil { + _, error := RedisUtil.GET(cookieToken.Value) + if error == nil { + needLoginFlag = false + } + } + + if needLoginFlag { + c.Redirect(http.StatusMovedPermanently, "/sdsf/login/test1?redirect_uri="+requestUri) + } else { + //将redis中的token有效期重置 + RedisUtil.EXPIRE(cookieToken.Value, 1800) + c.Next() + return + } + } +} diff --git a/dsSdsf/Router/SdsfRouter.go b/dsSdsf/Router/SdsfRouter.go new file mode 100644 index 00000000..177e3add --- /dev/null +++ b/dsSdsf/Router/SdsfRouter.go @@ -0,0 +1,15 @@ +package Router + +import ( + "dsSdsf/Business/Login/LoginController" + "github.com/gin-gonic/gin" +) + +//接口路由 +func GinRouter(r *gin.Engine) { + //注册分路线 + rr := r.Group("/sdsf") + //登录 + LoginController.Routers(rr) + +} diff --git a/dsSdsf/Utils/CommonUtil/CommonUtil.go b/dsSdsf/Utils/CommonUtil/CommonUtil.go new file mode 100644 index 00000000..f7347563 --- /dev/null +++ b/dsSdsf/Utils/CommonUtil/CommonUtil.go @@ -0,0 +1,16 @@ +package CommonUtil + +import ( + uuid "github.com/satori/go.uuid" + "strings" +) + +/** +功能:获取UUID +作者:黄海 +时间:2020-02-03 +*/ +func GetUUID() string { + u2 := strings.ToUpper(uuid.NewV4().String()) + return u2 +} diff --git a/dsSdsf/Utils/ConfigUtil/ConfigUtil.go b/dsSdsf/Utils/ConfigUtil/ConfigUtil.go new file mode 100644 index 00000000..b2f4284a --- /dev/null +++ b/dsSdsf/Utils/ConfigUtil/ConfigUtil.go @@ -0,0 +1,231 @@ +package ConfigUtil + +import ( + "fmt" + "gopkg.in/ini.v1" + "io/ioutil" + "os" +) + +var ( + //要发布到的主机信息 + DistributeIp string + DistributePort int32 + DistributeUser string + DistributePwd string + DistributeRemotePath string + DistributeLocalPath string + + //服务器的端口 + ServerPort string + + //mysql配置 + MysqlIp string + MysqlPort string + MysqlDbName string + MysqlUser string + MysqlPwd string + + //REDIS配置 + RedisIp string + RedisPort string + RedisDb string + RedisExpireTime int64 + + //项目名称 + ProjectName string + + //登录信息 + UserName string + UserPwd string + + //RSA私钥 + PrivateKey string +) + +// 判断所给路径文件/文件夹是否存在 +func Exists(path string) bool { + _, err := os.Stat(path) //os.Stat获取文件信息 + if err != nil { + if os.IsExist(err) { + return true + } + return false + } + return true +} +func init() { + //判断是不是单元测试,如果是的话,那么配置文件的路径需要加上一个. + var configIniFile = "./Config/Config.ini" + //判断文件不是存在 + if !Exists(configIniFile) { + configIniFile = "." + configIniFile + } + //再不存在,直接走物理路径 + if !Exists(configIniFile) { + configIniFile = "/usr/local/dsMin/dsSdsf/Config/Config.ini" + } + + iniParser := IniParser{} + if err := iniParser.Load(configIniFile); err != nil { + fmt.Printf("try load config file[%s] error[%s]\n", configIniFile, err.Error()) + return + } + + //要发布到的主机信息 + DistributeIp = iniParser.GetString("distribute", "ip") + DistributePort = iniParser.GetInt32("distribute", "port") + DistributeUser = iniParser.GetString("distribute", "user") + DistributePwd = iniParser.GetString("distribute", "pwd") + DistributeRemotePath = iniParser.GetString("distribute", "remotePath") + DistributeLocalPath = iniParser.GetString("distribute", "localPath") + + //web服务器端口 + ServerPort = iniParser.GetString("server", "port") + + //读取redis配置 + RedisIp = iniParser.GetString("redis", "ip") + RedisPort = iniParser.GetString("redis", "port") + RedisDb = iniParser.GetString("redis", "db") + RedisExpireTime = iniParser.GetInt64("redis", "expireTime") + + //项目名称 + ProjectName = iniParser.GetString("project", "project_name") + + //mysql + MysqlIp = iniParser.GetString("mysql", "ip") + MysqlPort = iniParser.GetString("mysql", "port") + MysqlDbName = iniParser.GetString("mysql", "db_name") + MysqlUser = iniParser.GetString("mysql", "user") + MysqlPwd = iniParser.GetString("mysql", "pwd") + + //登录信息 + UserName = iniParser.GetString("mysql", "user_name") + UserPwd = iniParser.GetString("mysql", "user_pwd") + + b, err := ioutil.ReadFile("./Config/privateKey.txt") + if err != nil { + fmt.Print(err) + } + PrivateKey = string(b) + +} + +type IniParser struct { + confReader *ini.File // config reader +} + +type IniParserError struct { + errorInfo string +} + +func (e *IniParserError) Error() string { return e.errorInfo } + +func (this *IniParser) Load(configFileName string) error { + conf, err := ini.Load(configFileName) + if err != nil { + this.confReader = nil + return err + } + this.confReader = conf + return nil +} + +func (this *IniParser) GetString(section string, key string) string { + if this.confReader == nil { + return "" + } + + s := this.confReader.Section(section) + if s == nil { + return "" + } + + return s.Key(key).String() +} + +func (this *IniParser) GetInt32(section string, key string) int32 { + if this.confReader == nil { + return 0 + } + + s := this.confReader.Section(section) + if s == nil { + return 0 + } + + valueInt, _ := s.Key(key).Int() + + return int32(valueInt) +} + +func (this *IniParser) GetUint32(section string, key string) uint32 { + if this.confReader == nil { + return 0 + } + + s := this.confReader.Section(section) + if s == nil { + return 0 + } + + valueInt, _ := s.Key(key).Uint() + + return uint32(valueInt) +} + +func (this *IniParser) GetInt64(section string, key string) int64 { + if this.confReader == nil { + return 0 + } + + s := this.confReader.Section(section) + if s == nil { + return 0 + } + + valueInt, _ := s.Key(key).Int64() + return valueInt +} + +func (this *IniParser) GetUint64(section string, key string) uint64 { + if this.confReader == nil { + return 0 + } + + s := this.confReader.Section(section) + if s == nil { + return 0 + } + + valueInt, _ := s.Key(key).Uint64() + return valueInt +} + +func (this *IniParser) GetFloat32(section string, key string) float32 { + if this.confReader == nil { + return 0 + } + + s := this.confReader.Section(section) + if s == nil { + return 0 + } + + valueFloat, _ := s.Key(key).Float64() + return float32(valueFloat) +} + +func (this *IniParser) GetFloat64(section string, key string) float64 { + if this.confReader == nil { + return 0 + } + + s := this.confReader.Section(section) + if s == nil { + return 0 + } + + valueFloat, _ := s.Key(key).Float64() + return valueFloat +} diff --git a/dsSdsf/Utils/RedisUtil/RedisUtil.go b/dsSdsf/Utils/RedisUtil/RedisUtil.go new file mode 100644 index 00000000..ddcb91ee --- /dev/null +++ b/dsSdsf/Utils/RedisUtil/RedisUtil.go @@ -0,0 +1,36 @@ +package RedisUtil + +import ( + "dsSdsf/Utils/ConfigUtil" + "github.com/go-redis/redis" + "time" +) + +var ( + RedisClient *redis.Client + RedisHost string + RedisDb int +) + +func init() { + // 从配置文件获取redis的ip以及db + RedisHost = ConfigUtil.RedisIp + ":" + ConfigUtil.RedisPort + RedisClient = redis.NewClient(&redis.Options{ + Addr: RedisHost, + DB: 0, // use default DB + }) +} + +func SET(key string, value string, expiration time.Duration) { + RedisClient.Set(key, value, expiration*time.Second) +} + +func GET(key string) (string, error) { + val, err := RedisClient.Get(key).Result() + return val, err + +} + +func EXPIRE(key string, expiration time.Duration) { + RedisClient.Expire(key, expiration*time.Second) +} diff --git a/dsSdsf/Utils/RsaUtil/RsaUtil.go b/dsSdsf/Utils/RsaUtil/RsaUtil.go new file mode 100644 index 00000000..dcf88803 --- /dev/null +++ b/dsSdsf/Utils/RsaUtil/RsaUtil.go @@ -0,0 +1,29 @@ +package RsaUtil + +import ( + "crypto/rand" + "crypto/rsa" + "crypto/x509" + "dsSdsf/Utils/ConfigUtil" + "encoding/pem" + "fmt" + "github.com/pkg/errors" +) + +/** +功能:对前端的RSA加密进行解密 +作者:黄海 +时间:2020-02-24 +*/ +func RsaDecrypt(ciphertext []byte) ([]byte, error) { + privateKey := ConfigUtil.PrivateKey + block, _ := pem.Decode([]byte(privateKey)) + if block == nil { + return nil, errors.New("private key error!") + } + priv, err := x509.ParsePKCS1PrivateKey(block.Bytes) + if err != nil { + return nil, errors.Wrap(err, fmt.Sprintf("Parse private key error:%s", err)) + } + return rsa.DecryptPKCS1v15(rand.Reader, priv, ciphertext) +} diff --git a/dsSdsf/Utils/cors.go b/dsSdsf/Utils/cors.go new file mode 100644 index 00000000..e8ee3191 --- /dev/null +++ b/dsSdsf/Utils/cors.go @@ -0,0 +1,27 @@ +package Utils + +import ( + "github.com/gin-gonic/gin" + "net/http" + "strings" + "time" +) + +// 处理跨域请求,支持options访问 +func Cors() gin.HandlerFunc { + return func(c *gin.Context) { + c.Header("Access-Control-Allow-Origin", "*") + c.Header("Access-Control-Allow-Headers", "Content-Type,AccessToken,X-CSRF-Token, Authorization, Token") + c.Header("Access-Control-Allow-Methods", "POST, GET") + c.Header("Access-Control-Expose-Headers", "Content-Length, Access-Control-Allow-Origin, Access-Control-Allow-Headers, Content-Type") + c.Header("Access-Control-Allow-Credentials", "true") + //如果是GET接口,禁止它缓存 + if strings.Index(c.Request.RequestURI, ".") < 0 { + c.Header("Cache-Control", "no-cache, no-store, max-age=0, must-revalidate, value") + c.Header("Expires", "Thu, 01 Jan 1970 00:00:00 GMT") + c.Header("Last-Modified", time.Now().UTC().Format(http.TimeFormat)) + } + // 处理请求 + c.Next() + } +} diff --git a/dsSdsf/go.mod b/dsSdsf/go.mod new file mode 100644 index 00000000..6ae53936 --- /dev/null +++ b/dsSdsf/go.mod @@ -0,0 +1,11 @@ +module dsSdsf + +go 1.16 + +require ( + github.com/gin-gonic/gin v1.7.2 // indirect + github.com/go-redis/redis v6.15.9+incompatible // indirect + github.com/pkg/errors v0.9.1 // indirect + github.com/satori/go.uuid v1.2.0 // indirect + gopkg.in/ini.v1 v1.62.0 // indirect +) diff --git a/dsSdsf/go.sum b/dsSdsf/go.sum new file mode 100644 index 00000000..7e918980 --- /dev/null +++ b/dsSdsf/go.sum @@ -0,0 +1,67 @@ +github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= +github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= +github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= +github.com/gin-contrib/sse v0.1.0 h1:Y/yl/+YNO8GZSjAhjMsSuLt29uWRFHdHYUb5lYOV9qE= +github.com/gin-contrib/sse v0.1.0/go.mod h1:RHrZQHXnP2xjPF+u1gW/2HnVO7nvIa9PG3Gm+fLHvGI= +github.com/gin-gonic/gin v1.7.2 h1:Tg03T9yM2xa8j6I3Z3oqLaQRSmKvxPd6g/2HJ6zICFA= +github.com/gin-gonic/gin v1.7.2/go.mod h1:jD2toBW3GZUr5UMcdrwQA10I7RuaFOl/SGeDjXkfUtY= +github.com/go-playground/assert/v2 v2.0.1 h1:MsBgLAaY856+nPRTKrp3/OZK38U/wa0CcBYNjji3q3A= +github.com/go-playground/assert/v2 v2.0.1/go.mod h1:VDjEfimB/XKnb+ZQfWdccd7VUvScMdVu0Titje2rxJ4= +github.com/go-playground/locales v0.13.0 h1:HyWk6mgj5qFqCT5fjGBuRArbVDfE4hi8+e8ceBS/t7Q= +github.com/go-playground/locales v0.13.0/go.mod h1:taPMhCMXrRLJO55olJkUXHZBHCxTMfnGwq/HNwmWNS8= +github.com/go-playground/universal-translator v0.17.0 h1:icxd5fm+REJzpZx7ZfpaD876Lmtgy7VtROAbHHXk8no= +github.com/go-playground/universal-translator v0.17.0/go.mod h1:UkSxE5sNxxRwHyU+Scu5vgOQjsIJAF8j9muTVoKLVtA= +github.com/go-playground/validator/v10 v10.4.1 h1:pH2c5ADXtd66mxoE0Zm9SUhxE20r7aM3F26W0hOn+GE= +github.com/go-playground/validator/v10 v10.4.1/go.mod h1:nlOn6nFhuKACm19sB/8EGNn9GlaMV7XkbRSipzJ0Ii4= +github.com/go-redis/redis v6.15.9+incompatible h1:K0pv1D7EQUjfyoMql+r/jZqCLizCGKFlFgcHWWmHQjg= +github.com/go-redis/redis v6.15.9+incompatible/go.mod h1:NAIEuMOZ/fxfXJIrKDQDz8wamY7mA7PouImQ2Jvg6kA= +github.com/golang/protobuf v1.3.3 h1:gyjaxf+svBWX08ZjK86iN9geUJF0H6gp2IRKX6Nf6/I= +github.com/golang/protobuf v1.3.3/go.mod h1:vzj43D7+SQXF/4pzW/hwtAqwc6iTitCiVSaWz5lYuqw= +github.com/google/gofuzz v1.0.0 h1:A8PeW59pxE9IoFRqBp37U+mSNaQoZ46F1f0f863XSXw= +github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg= +github.com/json-iterator/go v1.1.9 h1:9yzud/Ht36ygwatGx56VwCZtlI/2AD15T1X2sjSuGns= +github.com/json-iterator/go v1.1.9/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4= +github.com/leodido/go-urn v1.2.0 h1:hpXL4XnriNwQ/ABnpepYM/1vCLWNDfUNts8dX3xTG6Y= +github.com/leodido/go-urn v1.2.0/go.mod h1:+8+nEpDfqqsY+g338gtMEUOtuK+4dEMhiQEgxpxOKII= +github.com/mattn/go-isatty v0.0.12 h1:wuysRhFDzyxgEmMf5xjvJ2M9dZoWAXNNr5LSBS7uHXY= +github.com/mattn/go-isatty v0.0.12/go.mod h1:cbi8OIDigv2wuxKPP5vlRcQ1OAZbq2CE4Kysco4FUpU= +github.com/modern-go/concurrent v0.0.0-20180228061459-e0a39a4cb421 h1:ZqeYNhU3OHLH3mGKHDcjJRFFRrJa6eAM5H+CtDdOsPc= +github.com/modern-go/concurrent v0.0.0-20180228061459-e0a39a4cb421/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q= +github.com/modern-go/reflect2 v0.0.0-20180701023420-4b7aa43c6742 h1:Esafd1046DLDQ0W1YjYsBW+p8U2u7vzgW2SQVmlNazg= +github.com/modern-go/reflect2 v0.0.0-20180701023420-4b7aa43c6742/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0= +github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4= +github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= +github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= +github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= +github.com/satori/go.uuid v1.2.0 h1:0uYX9dsZ2yD7q2RtLRtPSdGDWzjeM3TbMJP9utgA0ww= +github.com/satori/go.uuid v1.2.0/go.mod h1:dA0hQrYB0VpLJoorglMZABFdXlWrHn1NEOzdhQKdks0= +github.com/stretchr/objx v0.1.0 h1:4G4v2dO3VZwixGIRoQ5Lfboy6nUhCyYzaqnIAPPhYs4= +github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= +github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI= +github.com/stretchr/testify v1.4.0 h1:2E4SXV/wtOkTonXsotYi4li6zVWxYlZuYNCXe9XRJyk= +github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4= +github.com/ugorji/go v1.1.7 h1:/68gy2h+1mWMrwZFeD1kQialdSzAb432dtpeJ42ovdo= +github.com/ugorji/go v1.1.7/go.mod h1:kZn38zHttfInRq0xu/PH0az30d+z6vm202qpg1oXVMw= +github.com/ugorji/go/codec v1.1.7 h1:2SvQaVZ1ouYrrKKwoSk2pzd4A9evlKJb9oTL+OaLUSs= +github.com/ugorji/go/codec v1.1.7/go.mod h1:Ax+UKWsSmolVDwsd+7N3ZtXu+yMGCf907BLYF3GoBXY= +golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= +golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9 h1:psW17arqaxU48Z5kZ0CQnkZWQJsqcURM6tKiBApRjXI= +golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= +golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3 h1:0GoQqolDA55aaLxZyTzK/Y2ePZzZTUrRacwib7cNsYQ= +golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= +golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200116001909-b77594299b42 h1:vEOn+mP2zCOVzKckCZy6YsCtDblrpj/w7B9nxGNELpg= +golang.org/x/sys v0.0.0-20200116001909-b77594299b42/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= +golang.org/x/text v0.3.2 h1:tW2bmiBqwgJj/UpqtC8EpXEZVYOwU0yG4iWbprSVAcs= +golang.org/x/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk= +golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e h1:FDhOuMEY4JVRztM/gsbk+IKUQ8kj74bxZrgw87eMMVc= +golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= +gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405 h1:yhCVgyC4o1eVCa2tZl7eS0r+SDo693bJlVdllGtEeKM= +gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= +gopkg.in/ini.v1 v1.62.0 h1:duBzk771uxoUuOlyRLkHsygud9+5lrlGjdFBb4mSKDU= +gopkg.in/ini.v1 v1.62.0/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k= +gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= +gopkg.in/yaml.v2 v2.2.8 h1:obN1ZagJSUGI0Ek/LBmuj4SNLPfIny3KsKFopxRdj10= +gopkg.in/yaml.v2 v2.2.8/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= diff --git a/dsSdsf/main.go b/dsSdsf/main.go new file mode 100644 index 00000000..18cb251e --- /dev/null +++ b/dsSdsf/main.go @@ -0,0 +1,32 @@ +package main + +import ( + "dsSdsf/Handler" + "dsSdsf/Router" + "dsSdsf/Utils" + "dsSdsf/Utils/ConfigUtil" + "github.com/gin-gonic/gin" +) + +func main() { + // 发布模式 + //gin.SetMode(gin.ReleaseMode) + // 开发模式 + gin.SetMode(gin.DebugMode) + // 开启gin服务器 + r := gin.Default() + // 使用跨域中间件 + r.Use(Utils.Cors()) + + //统一认证拦截器 + r.Use(Handler.LoginHandler()) + + //前台页面目录 + //r.Static("/dsSdsf", "./Html") + + //主路由 + Router.GinRouter(r) + + // 监听并在 0.0.0.0:8006 上启动服务 + r.Run(":" + ConfigUtil.ServerPort) +}