1

我们有一个如下所示的 kotlin 代码,我正在尝试使用 Javalin(3.12.0) 禁用 API 的选项方法,如下所示,但这会导致阻塞所有其他方法,例如 get 和 post。我在这里想念什么?

val app = Javalin.create {
        it.defaultContentType = "application/json"
        it.enableWebjars()
        it.addStaticFiles("", Location.CLASSPATH)
        it.enableCorsForAllOrigins()
        it.dynamicGzip = true
    }

app.options("/*") {ctx -> ctx.status(405)}

app.routes {        
        path("/auth") {
             post("/login") {
                Auth.doLogin(it)
            }
             get("/metrics") {
                val results = getData()
                it.json(results)
            }     
         }

还有 2 个问题 1.想要使用下面的代码为 get APi 的 20 请求实施一个小时的速率限制

   app.get("/") { ctx ->
     RateLimit(ctx).requestPerTimeUnit(5, TimeUnit.MINUTES) // throws if rate limit is exceeded
     ctx.status("Hello, rate-limited World!")
   }

如何实现?

  1. 如何限制在 API 调用时显示的码头服务器版本?
4

1 回答 1

1

对于码头...

Jetty 中只有 1 个 Rate Limit 概念,即org.eclipse.jetty.server.AcceptRateLimit作为 Jetty Container LifeCycle bean 添加到 中的ServerConnector,它不能调整特定请求端点的速率,仅适用于整个连接器。

如果您想要特定的端点费率,那么这org.eclipse.jetty.servlets.QoSFilter就是使用 Jetty 的方式。

的包含org.eclipse.jetty.server.HttpConfiguration用于org.eclipse.jetty.server.ServerConnector启用/禁用服务器公告的控件。

  • HttpConfiguration.setSendServerVersion(boolean)
  • HttpConfiguration.setSendXPoweredBy(boolean)
  • HttpConfiguration.setSendDateHeader(boolean)
于 2022-02-07T16:37:45.290 回答