首页 > 后端开发 > Golang > 如何在 Negroni 中实现特定于路由的中间件?

如何在 Negroni 中实现特定于路由的中间件?

DDD
发布: 2024-10-24 08:30:30
原创
1039 人浏览过

How to Implement Route-Specific Middleware in Negroni?

使用 Negroni 的路由特定中间件

简介

在 Web 服务器中实现身份验证机制对于保护用户数据和安全至关重要控制对受保护资源的访问。当使用 httprouter 包进行路由并使用 Negroni 进行中间件管理时,您可能会遇到需要从身份验证中排除特定路由的情况。本文探讨了如何在 Negroni 中实现特定于路由的中间件。

问题陈述

给定一个使用 httprouter 和 Negroni 的服务器设置,目标是实现一个身份验证处理程序(authenticator.Get()) 并将其应用于除一个路由之外的所有路由(例如“/login”)。

解决方案

针对 Negroni 的特定于路由的中间件,我们需要为每条路线创建单独的 Negroni 实例。在提供的示例中,为“/login”和“/”创建单独的 Negroni 实例。仅使用 loginHandler 将“/login”路由排除在身份验证之外,而“/”路由同时使用authenticator.Get() 和indexHandler。

实现

<code class="go">router := httprouter.New()
router.Handler("GET", "/login",
    negroni.New(negroni.HandlerFunc(loginHandler)))
router.Handler("GET", "/",
    negroni.New(authenticator.Get(),
    negroni.HandlerFunc(indexHandler)))

server := negroni.Classic()
server.UseHandler(router)
server.Use(sessions.Sessions("example-web-dev",
        cookiestore.New([]byte("some secret"))))
server.Run(":3000")</code>
登录后复制

要点

  • loginHandler 和 indexHandler 必须实现 func(http.ResponseWriter, *http.Request, http.HandlerFunc) 签名。
  • 所有路由都会继承 negroni.Classic() 的中间件以及添加到服务器的会话中间件。
  • 特定于路由的中间件是通过为每个路由嵌套具有不同中间件堆栈的 Negroni 实例来应用的。

以上是如何在 Negroni 中实现特定于路由的中间件?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板