GOLANG进阶:govalidator过滤器,MD5,JWT身份验证,redis

这篇具有很好参考价值的文章主要介绍了GOLANG进阶:govalidator过滤器,MD5,JWT身份验证,redis。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

1.govalidator过滤器:类似于正则匹配,主要放在结构体注释部分,有些验证没有,需要自己替换(把required部分替换成正则表达式)

引入资源包(两种方式):

go get github.com/asaskevich/govalidator

go get gopkg.in/asaskevich/govalidator.v10

代码(可以写在结构体中,也可以单独使用):

type User struct {
    gorm.Model
    USERNAME string `json:"name" validate:"min=0,max=35"`
    PASSWOR string `validate:"required"`
    SEX int8  `validate:"required"`
    PHONE string  `validate:"required"`
    EMAIL string `validate:"required,email"`
    ADDRESS string `json:"address" validate:"lte=0,gte=90"`
    STATUS int8 `validate:"required"`
    LOGINTIME time.Time `validate:"required"`
    LOGINIP string `validate:"required"`
    LOGOUTTIME time.Time `validate:"required"`
}

2.MD5加密:不可逆加密(框架内置,不需要额外引入包)

//小写版本
func Md5string(str string)  string{
    //初始化
    h := md5.New()
    //转换成文件流
    h.Write([]byte(str))
    temp :=h.Sum(nil)
    //输出
    return hex.EncodeToString(temp)
}

//大写版本
func MD5string(str string)  string{
    //初始化
    h := md5.New()
    //转换成文件流
    h.Write([]byte(str))
    temp :=h.Sum(nil)
    //输出
    return strings.ToUpper(hex.EncodeToString(temp))
}

3.jwt结构(JSON Web令牌):它是一个签名的JSON对象,可以做一些验证类的事情,可以看成是服务器发出的令牌,每次有新请求就会去验证(单点登录),如果是验证错误直接退出当前流程

组成部分

1.Header(标头)

2.Payload(有效载荷 )

3.Signature(签名)

GOLANG进阶:govalidator过滤器,MD5,JWT身份验证,redis,GOLANG,redis,非关系型数据库,golang,gin,中间件,数据库,单例模式

 

引入资源包

go get -u github.com/dgrijalva/jwt-go

代码:

import (
    "fmt"
    "github.com/dgrijalva/jwt-go"
    "github.com/gin-gonic/gin"
    "time"
)

type Claim struct {
    USERNAME string `josn:"userbane" validate:"required"`
    PASSWORD string `josn:"password" validate:"required"`
    //jwt标准结构
    jwt.StandardClaims
}

//密码(自定义:最好是写在配置文件,配合redis取用)
var jwtkey = []byte("local")

func main()  {
    //初始化
    g := gin.Default()
    g.GET("indexs",Indexs)
    g.GET("indexparse",Parsetoken)
    g.Run(":8080")
}

func Indexs(ctx *gin.Context)  {
    //获取参数
    uarname := ctx.Query("uarname")
    password := ctx.Query("password")
    expireTime := time.Now().Add(7 * 24 * time.Hour)

    //赋值
    claims := &Claim{
        USERNAME: uarname,
        PASSWORD: password,
        StandardClaims: jwt.StandardClaims{
            ExpiresAt: expireTime.Unix(), //过期时间
            IssuedAt:  time.Now().Unix(),//起始时间
            Issuer:    "127.0.0.1",  // 签名颁发者
            Subject:   "token", //签名主题
        },

    }
    //生成秘钥
    token := jwt.NewWithClaims(jwt.SigningMethodHS256, claims)
    //获取秘钥
    tokenString, _ := token.SignedString(jwtkey)
    ctx.JSON(200,gin.H{
        "ping":tokenString,
    })
}

func Parsetoken(ctx *gin.Context)  {
    //接收参数
    tokenst := ctx.GetHeader("Authorization")
    //判断参数是否为空
    if tokenst=="" {
        ctx.JSON(400,gin.H{
            "ping":"参数错误",
        })
    }
    //解码
    token, claims, err := ParseToken(tokenst)
    if err != nil || !token.Valid {
        ctx.JSON(400, gin.H{"ping":"秘钥错误"})
        ctx.Abort()//调过剩余的方法,直接返回
        return
    }

    //打印结构体(解码回传数据)
    fmt.Println(claims)
}

//解码方法
func ParseToken(tokenString string)  (*jwt.Token,*Claim,error){
    //初始化结构体
    Claims := &Claim{}
    //内置解码方法
    token, err := jwt.ParseWithClaims(tokenString, Claims, func(token *jwt.Token) (i interface{}, err error) {//匿名方法(可以分开写,也可以按照现在这样)
        return jwtkey, nil
    })
    return token, Claims, err
}

4.redis:非关系型数据库(具体了解可以看博主之前的文章)

引入资源包

go get -u github.com/go-redis/redis

//代码示例文章来源地址https://www.toymoban.com/news/detail-560923.html

import (
   "fmt"
   "github.com/go-redis/redis"
   "github.com/spf13/viper"
)

func Initredis() (errreback error) {
   //vip获取配置
   viper.SetConfigName("app")
   viper.AddConfigPath("config")
   err := viper.ReadInConfig()
   if err != nil {
      fmt.Println("redis参数配置错误")
   }

   //链接参数
   Rdb := redis.NewClient(&redis.Options{
      //链接地址
      Addr:     viper.GetString("redis.local") + ":" + viper.GetString("redis.port"),
      //链接密码
      Password: viper.GetString("redis.password"),
      //默认数据库
      DB:0,
      //Redis连接池大小
      PoolSize: 10,
      //最大重试次数
      MaxRetries: 3,
   })

   //链接
   _, err = Rdb.Ping().Result()
   if err != nil {
      fmt.Println("redis链接错误")
   }

   //返回值
   return nil
}

到了这里,关于GOLANG进阶:govalidator过滤器,MD5,JWT身份验证,redis的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • C++进阶--哈希的应用之位图和布隆过滤器

    哈希是一种映射的思想。 先来看一道题:给40亿个不重复的无符号整数,没排序过。给一个无符号整数,如何 快速判断 一个数 是否在 这40亿个数中。 首先想到的解法可能有这几种: 解法1 :遍历40亿个数,O(N) 解法2 :先排序,快排O( N l o g 2 N Nlog_2N Nl o g 2 ​ N ),再利

    2024年02月22日
    浏览(55)
  • jQuery选择器(二)(基本过滤器,内容过滤器,可见过滤器)

    写在前面 jQuery是一个快速、简洁的 JavaScript 框架,是继Prototype之后又一个优秀的 JavaScript 代码库。jQuery的设计宗旨是“WriteLess,DoMore”,即倡导写更少的代码,做 更多的事情。jQuery封装了 JavaScript 常用的功能代码,提供一种简便的 JavaScript 设计模式,优化HTML文档操作、事件

    2024年02月02日
    浏览(54)
  • Gateway自定义过滤器——全局过滤器

    首先,我们要知道全局过滤器其实是特殊路由过滤器(特殊的GatewayFilter),会有条件地作用于所有路由。 为什么要自定义全局过滤器?就好比是看大门的保安大叔,平时主要是做好进出大门外来人员登记即可,但是因为新冠疫情,现在还需要给外来人员测量体温等等。而已有的

    2024年02月16日
    浏览(47)
  • 异常过滤器—MVC中异常过滤器使用

    异常过滤器( Exception Filters )是 ASP.NET Core 中用于处理全局异常的机制。它们允许你在发生异常时捕获、处理和记录异常,并提供自定义的异常处理逻辑。异常过滤器在整个应用程序范围内生效,可以用于处理各种异常情况。用于实现常见的错误处理策略,没有之前和之后事

    2024年02月13日
    浏览(60)
  • Javaweb | 过滤器、配置、过滤器链、优先级

    💗wei_shuo的个人主页 💫wei_shuo的学习社区 🌐Hello World ! 概念 过滤器(Filter)是处于客户端与服务器目标资源之间的一道过滤技术 用户的请求和响应都需要经过过滤器 过滤器作用 执行地位在Servlet之前,客户端发送请求是,会先经过Filter,再到达目标Servlet中;响应时,会根

    2023年04月17日
    浏览(54)
  • 结果过滤器—MVC项目中结果过滤器(Result Filter)使用

    结果过滤器( ResultFilter ),是对执行的Action结果进行处理的一种AOP思想,适用于任何需要直接环绕 View 或格式化处理的逻辑。结果过滤器可以 替换或更改 Action 结果 。在 IActionResult 执行的前后执行,使用它能够控制Action的执行结果,比如:格式化结果等。需要注意的是,它只

    2024年02月12日
    浏览(55)
  • 资源过滤器—MVC中使用资源过滤器实现不执行Action方法体读取缓存信息返回

    上两篇文章分享了过滤器实现JWT进行鉴权,分别是通过授权过滤器和操作过滤器实现,这两个过滤器也是最常用的。文章链接:授权过滤器—MVC中使用授权过滤器实现JWT权限认证,操作过滤器—MVC中使用操作过滤器实现JWT权限认证,接下来将简单的谈谈资源过滤器在MVC中如何

    2024年02月13日
    浏览(55)
  • JavaWeb过滤器(Filter)详解,是时候该把过滤器彻底搞懂了(万字说明)

            注意:这篇文章很长,学习完后将会解决你对于过滤器(Filter)的所有疑惑,下面将通过理论和代码的结合来进行讲解演示.....    目录 基本介绍 过滤器原理 过滤器(Filter)接口 使用过滤器(Filter) 创建过滤器(Fliter) 使用过滤器(Filter) 配置过滤器(Filter)拦截路径  注解方式

    2024年02月02日
    浏览(41)
  • spring boot过滤器实现项目内接口过滤

    由于业务需求,存在两套项目,一套是路由中心,一套是业务系统. 现在存在问题是,路由中心集成了微信公众号与小程序模块功能,业务系统部署了多套服务. 现在需要通过调用路由中心将接口重新路由到指定的业务系统中 将小程序,公众号用户信息与业务系统做绑定 将路由中心的

    2023年04月20日
    浏览(49)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包