接口服务部署上线后,需要对请求方进行限制,主要是限制请求的主机,只有指定主机发过来的请求才被受理,否则拒绝服务。akka http的API中的HostDirectives可实现此项功能,有以下三个可选项供选择:
def host(hostNames: String*): Directive0
def host(predicate: String ⇒ Boolean): Directive0
def host(regex: Regex): Directive1[String]
限制主机名,主机判断,正则匹配等等。详细可参见官网文档:
https://doc.akka.io/docs/akka-http/current/routing-dsl/directives/host-directives/host.html#host
基于我的需求,只需要指定主机名就可以了,即第一个方法。
val route = host("hadoop01.com","hadoop02.com"){
get{
path("info"){
业务逻辑
complete("OK")
}
}
}
在发送请求时在header中要将请求的Hostname添加进去,只有配置了允许的主机名才可以访问。
需要说明的是,hostname要加在请求头中,官网的说明: