当前位置: 首页 > news >正文

企业查询网站企查查网站 默认首页

企业查询网站企查查,网站 默认首页,百度帐号登录,oa系统公司排名本篇介绍HTTP Basic Auth的实现以及Recovery机制。 HTTP Basic Auth Basic Auth是一种开放平台认证方式#xff0c;简单的说就是需要你输入用户名和密码才能继续访问。对于Basic Auth的概念不过多的进行介绍#xff0c;直接进入如何实现的过程。 Basic Auth说白了就是账号和密…本篇介绍HTTP Basic Auth的实现以及Recovery机制。 HTTP Basic Auth Basic Auth是一种开放平台认证方式简单的说就是需要你输入用户名和密码才能继续访问。对于Basic Auth的概念不过多的进行介绍直接进入如何实现的过程。 Basic Auth说白了就是账号和密码的组合所以定义用来存储账号和密码的结构体。 type (// BasicAuthPair .BasicAuthPair struct {Code stringUser string}// Account .Account struct {User stringPassword string}// Accounts .Accounts []Account// Pairs .Pairs []BasicAuthPair ) 复制代码其中 Accounts 用来存放原始原始的账号密码组合 Pairs 用来存经过编码的账号密码组合。 Basic Auth初始化的过程就是将 “账号:密码” 串经过base64编码之后存放在Pairs中。 func processCredentials(accounts Accounts) (Pairs, error) {if len(accounts) 0 {return nil, errors.New(Empty list of authorized credentials.)}pairs : make(Pairs, 0, len(accounts))for _, account : range accounts {if len(account.User) 0 || len(account.Password) 0 {return nil, errors.New(User or password is empty)}base : account.User : account.Passwordcode : Basic base64.StdEncoding.EncodeToString([]byte(base))pairs append(pairs, BasicAuthPair{code, account.User})}// We have to sort the credentials in order to use bsearch later.sort.Sort(pairs)return pairs, nil } 复制代码在访问对应url的时候会提取auth字段然后将auth字段在我们保存的Pairs 中进行比对查找如果找到了就会返回对应的user func searchCredential(pairs Pairs, auth string) string {if len(auth) 0 {return }// Search user in the slice of allowed credentialsr : sort.Search(len(pairs), func(i int) bool { return pairs[i].Code auth })if r len(pairs) subtle.ConstantTimeCompare([]byte(pairs[r].Code), []byte(auth)) 1 {// user is allowed, set UserId to key user in this context, the userId can be read later using// c.Get(userreturn pairs[r].User}return } 复制代码相应的 如果我们需要对一个 url 开启Basic Auth认证首先定义一个路由组调用对应的Basic Auth的中间件函数。 accounts : gin.Accounts{{User: admin, Password: password},{User: foo, Password: bar},} authorized : r.Group(/auth, gin.BasicAuth(accounts)) 复制代码然后把需要认证的url都挂在下边 authorized.GET(/secret, func(c *gin.Context) {c.JSON(http.StatusOK, gin.H{secret: The secret url need to be authorized,}) }) 复制代码这样当我们访问 /auth/secret 的时候就需要经过Basic Auth的认证。如果我们在浏览器端访问会弹出一个提示框要求输入账号和密码 如果是在 postman 等工具中访问 需要在header中添加一个 Authorization 字段字段的值是 “Basic 账号:密码的base64编码”。 比如账号是admin 密码是password 那么“admin:password” 经过base64编码的结果是“YWRtaW46cGFzc3dvcmQ” 所以对应的Authorization填的值应该是 “Basic YWRtaW46cGFzc3dvcmQ”。 Recovery Recovery在web框架中也是一个必不可少的中间件如果某个请求出现了panic服务需要捕获请求中的panic信息并且把信息打印到日志中有利于后期的维护和修复。 Recovery 其实就是定义了一个defer函数来处理请求中的panic在defer中会通过golang的recover() 函数catch住panic然后将对应的栈信息打印出来。 func Recovery() HandlerFunc {return func(c *Context) {defer func() {if len(c.Errors) 0 {log.Println(c.Errors)}if err : recover(); err ! nil {stack : stack(3)log.Printf(PANIC: %s\n%s, err, stack)c.Writer.WriteHeader(http.StatusInternalServerError)}}()c.Next()} } 复制代码一般来说log中间件和recovery中间件都是必须的所以可以定义一个默认的框架初始化函数自动把log中间件和recovery中间件加载进去。 // Default Returns a Engine instance with the Logger and Recovery already attached. func Default() *Engine {engine : New()engine.Use(Recovery(), Logger())return engine } 复制代码至此一个简易版本的gin web框架就成型了包括最基本的日志功能、错误恢复、路由功能、认证功能等。当然也可以在这个基础之上在增加ORM等模块当是后续的功能扩展了。 完整的代码参见 github.com/harleylau/m…
http://www.zqtcl.cn/news/310803/

相关文章:

  • 石家庄市住房和城乡建设厅网站好的企业型网站模板下载
  • 哈尔滨快速建站公司推荐网站刷流量会怎么样
  • 网站开发 顺德做新闻微网站有哪些
  • 如何阿里巴巴网站做推广苏州高新区建设局网站管网
  • 个人网站设计构思做汽车保养的网站
  • 在什么网站可以接国外的模具做中英文网站是怎么做的
  • 网站中的文字滑动怎么做的沈阳模板建站定制
  • 国内网站开发二手房网站开发背景
  • 电商网站建设与管理实践电商网站前端制作分工
  • 外贸公司怎么接订单网站编辑做seo好做吗
  • 科技企业网站建设珠海微信网站开发
  • 科凡网站建设小程序自己开发
  • 专门做金融的招聘网站wordpress 价格
  • 微商城网站建设信息定制程序网站
  • 电子政务网站开发餐饮品牌设计包括哪些
  • 深圳手机商城网站设计公司网站做会员用什么源码
  • 安康网站建设公司价格pathon做网站
  • jq网站模板宣城有做网站的公司吗
  • 江苏个人备案网站内容大连seo加盟
  • 服装网站建设公司地址公司网站建设需要注意什么
  • 免费行情软件网站下载安装电子商务网站建设实训报告
  • wordpress怎么添加企业网站美化网站公司
  • 工作室网站源码全球军事网站
  • 网站设计模板免费建站珠海正规网站制作排名费用多少
  • 北京沙河教做网站的wordpress增加自适应功能
  • 中国著名的个人网站网站设计怎么做ppt答辩
  • 郑州做招商的网站网站后台主流网站开发语言
  • 专业足球网站开发铜陵网站优化
  • 南昌高端网站开发山西太原网站建设公司
  • 青岛专业制作网站的公司吗百度咨询