后台管理系统嵌入了Gitbook做帮助中心,需要给Gitbook添加下认证。

思路如下:修改Gitbook发布时的js,给每个URL拼接上用户登录后的Token,Gitbook前面有个代理获取这个Token,Token验证成功,则将请求发送给Gitbook server,否则返回403.

本打算用NGINX来实现,但是发现会比较麻烦,不好处理,直接使用go实现下,简单方便。

核心如下:

func Handler(w http.ResponseWriter, r *http.Request) {url, err := url.Parse(gitbook) // gitbook为后端Gitbook server地址if err != nil {log.Fatal(err)}proxy := httputil.NewSingleHostReverseProxy(url)proxy.ServeHTTP(w, r)}

增加个拦截器:

func HTTPInterceptor(h http.HandlerFunc) http.HandlerFunc {return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {r.ParseForm()token := r.Form.Get("token")if token == "" || token != token {w.WriteHeader(http.StatusInternalServerError)fmt.Fprintln(w, "403 Forbidden")return}h(w, r)})}

HTTPS的配置

http.ListenAndServeTLS(host, "server.pem", "server.key", nil)

完整代码如下:

package mainimport ("fmt""log""net/http""net/http/httputil""net/url")func init() {log.SetFlags(log.LstdFlags | log.Lshortfile)}// 配置文件var (host    = ":8080"token   = "a3du27" // 可以从Redis或MySQL中获取然后验证https   = truegitbook = "127.0.0.1:7000")func HTTPInterceptor(h http.HandlerFunc) http.HandlerFunc {return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {r.ParseForm()token := r.Form.Get("token")if token == "" || token != token {w.WriteHeader(http.StatusInternalServerError)fmt.Fprintln(w, "403 Forbidden")return}h(w, r)})}func Handler(w http.ResponseWriter, r *http.Request) {url, err := url.Parse(gitbook)if err != nil {log.Fatal(err)}proxy := httputil.NewSingleHostReverseProxy(url)proxy.ServeHTTP(w, r)}func main() {http.HandleFunc("/", HTTPInterceptor(Handler))var err errorif https {err = http.ListenAndServeTLS(host, "server.pem", "server.key", nil)} else {err = http.ListenAndServe(host, nil)}if err != nil {log.Fatal(err)}}

.net ad域登录 form认证_golang|给Gitbook做个认证代理相关推荐

  1. Java实现AD域登录认证

    最近公司派遣去乙方公司做项目开发,之前做好了的登录模块,按理来说是可以完全复用的,但是乙方客户提出要求,要用AD域登录认证的方式进行登录我们开发的Java Web系统,于是上网搜集了相关的资料,并运用 ...

  2. MFI认证是什么意思,什么是MFI认证,要怎么做MFI认证

    MFI认证是什么意思,什么是MFI认证,要怎么做MFI认证 "MFI"是一个缩写,全称是:made for iPhone"made for iPod" &quo ...

  3. Java AD域登录实现正常本地登录操作

    Java 域登录 实现 前言 新建一个测试类 AD域的userName和passWord身份验证成功之后返回 身份验证失败之后返回 验证成功后将之代入项目登录的位置,根据自己的登录接口和登陆逻辑来修改 ...

  4. svn基于mysql认证_Svn基于mysql做登陆认证

    不做权限控制的登陆认证 基础环境 Centos 6 Apache 2.2 Svn 1.6 Mysql 5.1 yum -y install mysql mysql-devel mysql-server ...

  5. 什么是FSC认证?为什么要做FSC认证?

     什么是FSC认证? FSC即森林管理委员会(TheForestStewardshipCouncil),是由世界自然基金会(WWF)组织发起的一个独立的.非盈利性的非政府组织.它成立于1993年,其宗 ...

  6. CE认证流程,如何做CE认证

    各国认证如何办理 本文由信恒检测技术(深圳)有限公司(简称BTF Test Lab)提供,信恒检测您值得永恒信赖的专业检测机构. CE认证适用范围: CE认证要准备的技术文件: 1.制造商(欧盟授权代 ...

  7. AD域账户登录mysql_ASP.NET Core AD 域登录

    在选择AD登录时,其实可以直接选择 Windows 授权,不过因为有些网站需要的是LDAP获取信息进行授权,而非直接依赖Web Server自带的Windows 授权功能. 当然如果使用的是Azure ...

  8. python 用户认证_Python使用LDAP做用户认证的方法

    LDAP(Light Directory Access Portocol)是轻量目录访问协议,基于X.500标准,支持TCP/IP. LDAP目录以树状的层次结构来存储数据.每个目录记录都有标识名(D ...

  9. AD域账户登录mysql_java集成微软的ad域,实现单点登录

    public ResultMsg loginAd(User user) throwsException { ResultMsgmsg;//通过ad域登录 Hashtable env = newHash ...

最新文章

  1. Linux操作系统及平台虚拟化技术漫谈
  2. Java查询大文本文件的处理方法
  3. 中华成语故事摄制组大公无私的释义
  4. [FJOI2007]轮状病毒
  5. mysql中如何操作字符串_mysql 字符串操作
  6. 高校在线考试系统_高校在线考试系统有哪些优点
  7. 索引 Index -- 快速查找数据
  8. ajax 服务器怎么响应,Ajax 接收服务器返回的json响应方法
  9. 是引进外部函数吗_CALCULATE函数的最佳搭档:FILTER
  10. 一图胜千言:用好图表,好好说话
  11. 从微软重返诺基亚:Juha Alakarhu是何许人也?
  12. 车型代号对照表_宝马内部代号对应车型解读,绝密!
  13. 求最小公倍数的几种方法
  14. 英特尔凌动处理器_教你看懂英特尔处理器:什么是Core i3,i5,i7 和Pentium?
  15. 初等矩阵的逆矩阵如何“一眼就能看出”
  16. linux dd命令制作软盘,[Ubuntu]dd 命令,软盘读写实例:二进制文件.bin -镜像文件 .img - 软盘设备 /dev/fd0...
  17. GSM Communication on EBox4300--(1)
  18. JVM#Java高墙之GC与内存分配策略
  19. Kubernetes详解(三十七)——PV与PVC
  20. 怎么重置imac_[pc玩家]如何重置Mac电脑到出厂状态

热门文章

  1. odps新手上路之安装Eclipse开发环境
  2. 7对讲机调频软件_对讲机怎么配对?
  3. 任意门怎么用团发_平开门、推拉门都out了!衣柜门这样设计,实用方便又大气!...
  4. docker启动odoo提示module没有安装_Ubuntu20.04通过docker安装微信
  5. 怎么解决python Non-ASCII character错误
  6. centos8部署Django项目---后台运行
  7. java perl5compiler,Java中正则表达式使用方法详解(四)
  8. linux 函数 文件校验,Linux中的文件效验命令
  9. 为自己写程序之JavsScript代码段测试器
  10. tennylvHTML5实现屏幕手势解锁(转载)