2016-08-18 3 views
1

인증 (JWT)에 Silhouette의 도움으로 Play Framework에 REST API를 만들고 있습니다.맞춤 필터 재생 JSON 오류

모든 보안 응답에 일부 헤더를 추가해야합니다 (사용자가 기록 된 경우에만 해당). 그래서 나는 그들을 추가하기 위해 filter을 사용하려고 생각했다. 요청에 대한

'POST/로그인했습니다'[잘못된 JSON : akka : [출처로 인해 끝의 입력 매핑하는 콘텐츠를하지만 내가 알아낼 수없는이 이상한 오류가 발생합니다. [email protected]; 라인 : 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) 

} 
+0

필터가 기본 패키지에 있습니까? 그렇지 않은 경우, 패키지를 Play에 알려야합니다 (이미 읽지 않은 경우를 대비해서) [see this] (https://www.playframework.com/documentation/2.5.x/ScalaHttpFilters#Using-filters). – Nio

+0

필터가 실행되었지만 필터가 포함되어 있지 않으면 오류가 발생하지 않습니다 ... –

+0

이 프로를 해결 했습니까? –

답변

2

,하지만 같은 문제에 직면 한 이래로 그 문제에 대한 해결책을 찾는데 2 일을 보냈다. 나는 그것을 보여줄 의무가있다. 여기서 문제는 요청 본문을 필터에서 두 번 이상 컨트롤러에서 두 번 이상 파싱하는 것과 관련이 있습니다. 따라서 해답은 본문 내용을 구문 분석하지 않는 파서 (명시 적으로)를 제공하는 것입니다. play.api.mvc.BodyParsers.parse.empty. 이 사람의 시간을 절약 할 수

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(BodyParsers.parse.empty) { userAwareReq => 
      userAwareReq.identity match { 
       case None => nextFilter(requestHeader) 
       case Some(identity) => 
        nextFilter(requestHeader).map { result => 
         result.withHeaders(/* add headers*/) 
        } 
      } 
     }    
     action(requestHeader).run 
    } 
} 

희망 :

필터처럼 보일 것이다.