master
kgdxpr 4 years ago
parent 8e734cdd35
commit 6532c62f9b

@ -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": "登录成功!"})
}

@ -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

@ -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-----

@ -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
}
}
}

@ -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)
}

@ -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
}

@ -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
}

@ -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)
}

@ -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)
}

@ -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()
}
}

@ -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
)

@ -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=

@ -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)
}
Loading…
Cancel
Save