首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用finatra检测协议

用finatra检测协议
EN

Stack Overflow用户
提问于 2017-03-30 15:07:15
回答 1查看 72关注 0票数 1

你好,我是Finatra的新成员,我想知道是否有一种方法来验证请求是使用https协议发出的?

EN

回答 1

Stack Overflow用户

发布于 2019-09-24 09:01:07

如果希望始终使用HTTPS,可以禁用http服务器服务器。

代码语言:javascript
复制
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使用,那么您可以定义过滤器,例如:

每条路线

代码语言:javascript
复制
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"
  }
}

每个控制器

代码语言:javascript
复制
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的所有实现,您可能会发现一些过滤器可以重用或将过滤器作为基础。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43121685

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档