我们有如下的 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.想要使用以下代码实现一小时内 20 个请求的 get APi 的速率限制
app.get("/") { ctx ->
RateLimit(ctx).requestPerTimeUnit(5, TimeUnit.MINUTES) // throws if rate limit is exceeded
ctx.status("Hello, rate-limited World!")
}
如何实现?
- 如何限制 API 调用时显示的 jetty 服务器版本?
最佳答案
对于码头...
Jetty 中只有 1 个速率限制概念,那就是 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)
关于kotlin - javalin中限制选项方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70845919/