1

ajax 以外のリクエストを拒否するディレクティブを作成しようとしています。以下のコードは明らかに機能しません。

import akka.http.scaladsl.model.HttpHeader
import akka.http.scaladsl.server.Directive0
import akka.http.scaladsl.server.directives.BasicDirectives
import akka.http.scaladsl.server.directives.HeaderDirectives
import akka.http.scaladsl.server.directives.RouteDirectives

trait AjaxDirectives extends BasicDirectives with HeaderDirectives with RouteDirectives {
  private val valid = "XMLHttpRequest"

  def ajax(): Directive0 = {
    headerValueByName("X-Requested-With") { header ⇒
      if (header == valid) {
        pass
      } else {
        reject
      }
    }
  }
}

(ここで 2 つの問題: passis Directive0& headerValueByNameis Directive1、およびheaderValueByNameis Directive1& ajaxis Directive0。したがって、コンパイルされません)

私の質問は、どうにかしてローカル スコープの抽出を行うことはできますか? のように、headerエスケープしませんajax


を使用せずにヘッダーを引き出すリクエストにアクセスできることはわかっているheaderValue*ので、それで答えないでください。

4

1 に答える 1

1

読書SecurityDirectives.authorizeAsyncは私に答えを与えました:

import akka.http.scaladsl.model.HttpHeader
import akka.http.scaladsl.server.Directive0
import akka.http.scaladsl.server.directives.BasicDirectives
import akka.http.scaladsl.server.directives.HeaderDirectives
import akka.http.scaladsl.server.directives.RouteDirectives

trait AjaxDirectives extends BasicDirectives with HeaderDirectives with RouteDirectives {
  private val headerName = "X-Requested-With"
  private val valid = "XMLHttpRequest"

  def ajax(): Directive0 = {
    headerValueByName(headerName).flatMap { header ⇒
      if (header == valid) {
        pass
      } else {
        reject
      }
    }
  }
}
于 2016-08-03T08:11:01.723 に答える