2016-08-04 4 views
1

하위 도메인이없는 모든 트래픽을 하위 도메인 www (예 : foo.com ->www.foo.com)으로 리디렉션해야합니다.spray-http 다른 하위 도메인으로 리디렉션

아래의 코드가 작동하지만 리디렉션 코드가 취약하여 보안 결함이 발생할 수 있습니다.

이것을 달성하는 적절한 방법입니까, 아니면 사용해야 할 지시어가 있습니까?

host("^(?!www).+".r) { h => 
    unmatchedPath { p => 
    schemeName { s => 
     redirect(s"$s://www.$h$p", StatusCodes.MovedPermanently) 
    } 
    } 
} 

편집 : 내 첫 번째 오류는 잘못된 상태 코드 (대신 StatusCodes.MovedPermanentlyStatusCodes.SeeOther)를 사용했다

답변

0

, 두 번째는, URL 만

버전의 경로 부분을 사용하고 있었다 StatusCodes.MovedPermanentlyStatusCodes.SeeOther 변경 아래에서 내 테스트 세트를 통과합니다 (아래 참조).

host("^(?!www).+".r) { h => 
    unmatchedPath { p => 
    requestUri { s => 
     val r = s.withHost(s"www.$h") 
     redirect(r, StatusCodes.MovedPermanently) 
    } 
    } 
} 

t 이하

"Redirect correctly" in { 
    "request"      | "redirect"       | 
    u("http://acme.com")   ! u("http://www.acme.com")   | 
    u("http://foo.com")    ! u("http://www.foo.com")    | 
    u("http://acme.com/search?a=1") ! u("http://www.acme.com/search?a=1") | 
    u("http://acme.com/search#abc") ! u("http://www.acme.com/search#abc") | 
    u("http://acme.com/service/") ! u("http://www.acme.com/service/") | 
    u("https://acme.com")   ! u("https://www.acme.com")   |> { (a :java.net.URI, b :java.net.URI) => { 
     Get(a.toString) ~> wholeRoute ~> check { 
     status === MovedPermanently 
     header("Location").get.value == b.toString 
     } 

    } 
    } 
} 
관련 문제