2012-07-24 2 views
2

Play에서 스칼라 함수를 생성 중입니다! 내 웹 서비스에 대한 요청을 인증하는 응용 프로그램입니다. 인증은 기본적으로 HMAC 인증입니다. 이 메서드는 사용할 bodyParser 유형을받습니다. 이후로 -bodyParser의 유형을 알 수 없으므로 request.body를 MD5 처리를 실행할 수있는 일반 Array [Byte]로 어떻게 변환 할 수 있습니까? 재생 수신MD5를 계산하기 위해 request.body를 바이트 배열로 변환하는 방법은 무엇입니까?

def Authenticated[T](authType : AuthenticationType, bodyParser : BodyParser[T])(f : (Request[T]) => Result) = { 

    Action(bodyParser) { request => 

     // Authentication logic starts here 

     // TODO: Something like: var bodyData : Array[Byte] = request.body.toByteArray() 

     // The rest is easy... 
     var contentMD5 = calculateMD5(bodyDat) 
     f(request) 
    } 
} 
+0

는 http://stackoverflow.com/questions/4905393/scala-inputstream-to-arraybyte 그건 단지 사실 –

답변

0

모든 요청 본문은 요청 본문의 순수한 원시 바이트 배열 표현을 줄 수있는 Http.RawBuffer로 해석 될 수있다.

당신이 찾고있는 코드 줄은

var bodyData : Array[Byte] = request.body.asRaw.asBytes() 
+0

참조 할 때 BodyParser의 종류 AnyContent입니다. 필자의 경우 BodyParser의 타입은 T이므로 request.body의 타입이 T이고 T가 알려지지 않았기 때문에 'asRaw'메소드가 없다는 것을 의미합니다. – Lior

+0

여기에 스칼라를 구체적으로 설명하지는 않았지만 (여기에 말장난),'T extends'를'T extends AnyContent'로 바꾸는 것이 타당한 해결책이 아닌가? 이제는 임의의 JVM 유형을 순수 바이트 표현으로 변환하는 방법을 묻고 있습니다. 물론 이것은 사소한 답이 없습니다. 바이트 배열로 변환하는 데 도움이되는 몇 가지 기본 사항을 제공하는 기본 클래스에서 적어도 형식을 확장해야합니다. – DCKing

+0

나는 그것을 할 수 있다고 확신한다. 그러므로 질문이 나온다. 어쩌면 요청에 대한 반복문이있는 것 같습니다. (http://www.playframework.org/documentation/2.0/Iteratees). – Lior

관련 문제