你好,我是Finatra的新成员,我想知道是否有一种方法来验证请求是使用https协议发出的?
发布于 2019-09-24 09:01:07
如果希望始终使用HTTPS,可以禁用http服务器服务器。
import com.twitter.finagle.Http
import com.twitter.finatra.http.HttpServer
import com.twitter.finatra.http.routing.HttpRouter
object ExampleHttpsServerMain extends ExampleHttpsServer
class ExampleHttpsServer
extends HttpServer
with Tls {
override val defaultHttpPort: String = "" // disable the default HTTP port
override val defaultHttpsPort: String = ":443"
override def configureHttp(router: HttpRouter): Unit = {
router
.add[ExampleController]
}
}但是,如果您希望某个特定的控制器或路由检查它是否是https,例如,登录应该仅通过https使用,那么您可以定义过滤器,例如:
每条路线
class ExampleController @Inject()(
exampleService: ExampleService
) extends Controller {
filter[ExampleFilter].get("/ping") { request: Request =>
"pong"
}
filter[ExampleFilter]
.filter[AnotherExampleFilter]
.get("/name") { request: Request =>
response.ok.body("Bob")
}
filter(new OtherFilter).post("/foo") { request: Request =>
exampleService.do(request)
"bar"
}
}每个控制器
import DoEverythingModule
import ExampleController
import ExampleFilter
import com.twitter.finagle.http.Request
import com.twitter.finatra.http.filters.AccessLoggingFilter
import com.twitter.finatra.http.routing.HttpRouter
import com.twitter.finatra.http.{Controller, HttpServer}
object ExampleServerMain extends ExampleServer
class ExampleServer extends HttpServer {
override val modules = Seq(
DoEverythingModule)
override def configureHttp(router: HttpRouter) {
router
.add[ExampleFilter, ExampleController]
}
}如果您检查SimpleFilter的所有实现,您可能会发现一些过滤器可以重用或将过滤器作为基础。
https://stackoverflow.com/questions/43121685
复制相似问题