【发布时间】:2016-12-25 09:49:20
【问题描述】:
我正在 Play Framework 中创建一个 REST API,并借助 Silhouette 进行身份验证(JWT)。
我需要为每个安全响应添加一些标头(仅当用户登录时)。所以我想用filter 来添加它们。但是我得到了这个我无法弄清楚的奇怪错误:
对于请求 'POST /signIn' [Invalid Json: No content to map due to [来源: akka.util.ByteIterator$ByteArrayIterator$$anon$1@7bf4f7c1;线:1, 列:0]]
我的过滤器:
class SecuredFilter @Inject() (silhouette: Silhouette[DefaultEnv])(implicit val mat: Materializer, ec: ExecutionContext) extends Filter {
def apply(nextFilter: RequestHeader => Future[Result])(requestHeader: RequestHeader): Future[Result] = {
val action = silhouette.UserAwareAction.async { userAwareReq =>
userAwareReq.identity match {
case None => nextFilter(requestHeader)
case Some(identity) =>
nextFilter(requestHeader).map { result =>
result.withHeaders( /* add headers*/ )
}
}
}
action(requestHeader).run
}
}
过滤器类:
class Filters @Inject() (csrfFilter: CSRFFilter, securityHeadersFilter: SecurityHeadersFilter,
securedFilter: SecuredFilter) extends HttpFilters {
override def filters: Seq[EssentialFilter] = Seq(csrfFilter, securityHeadersFilter, securedFilter)
}
【问题讨论】:
-
您的过滤器是否在默认包中?如果没有,您必须通知 Play 包裹 - see this(以防您尚未阅读)。
-
过滤器被触发,当它不被包含时我没有收到错误...
-
你的问题解决了吗?
-
@AndrewLuca 有点...我使用了不同的方法,请参见此处:github.com/olivebh/play-silhouette-ratelimiting/blob/master/app/…
标签: scala playframework silhouette