2013-05-30 3 views
0

내가하려는 것은 내 2.1 게임에서 CORS에 대한 지원을 구축하는 것입니다. 그 전제는/admin의 경로에서 들어오는 모든 것이 응답에 CORS 헤더를 가져와야한다는 것입니다. 이것은 StackOverflow를 통해 함께 자갈을 잘라 붙인 솔루션으로 충분합니다. 내 Controller 액션 각각은 CORS 헤더를 응답에 포함시키는 랩핑 된 Action을 활용합니다. 문제는 나의 순진 구현은 이제 내 경로 파일에 존재하지 않는 URL에 대한 OPTIONS 요청에서 200 OK를 반환합니다! 순항 컨트롤러를 수정하여 경로 파일에 URL이 있는지 확인하고 경로를 찾지 못하면 404 찾을 수 없습니까?내 작업 내에서 경로 조회 수행하기

conf의/루트

# Routes 
# This file defines all application routes (Higher priority routes first) 
# ~~~~ 

# Home page 
GET /       controllers.Application.index 
GET  /hb       controllers.Application.hb 

# Admin API 
POST /admin/sessions    controllers.admin.Sessions.session 
GET  /admin/apps     controllers.admin.Apps.index 
OPTIONS /admin/*url     controllers.admin.Admin.options(url: String) 

# Map static resources from the /public folder to the /assets URL path 
GET  /assets/*file    controllers.Assets.at(path="/public", file) 

내 관리 컨트롤러 내가

OPTIONS /admin/sessions HTTP/1.1 
HTTP/1.1 200 OK 

OPTIONS /admin/sessions HTTP/1.1 
HTTP/1.1 200 OK 
,536을 기대

object Admin extends Controller { 
    val log = LoggerFactory.getLogger(getClass()) 

    def options(url: String) = CORS_Writer { 
    Action { 
     log.trace("options(url: {}", url); 
     /* 
     * I need to validate that url exists in the routes file here 
     * (this doesn't compile, but conceptually is what I want). 
     */ 
     if(routes(url)) { Ok } else { NotFound } 
    } 
    } 
} 

처리하는 일반적인 옵션을 제공합니다

하지만

OPTIONS /admin/bob HTTP/1.1 
HTTP/1.1 404 Not Found 

나는 스칼라 모두 새로 온 사람과 플레이 나는 재생 2.1 문서가 심하게 루트 작업의 세부 사항에 대한 부족 찾을 수 있습니다. 이 질문이 단순한 것처럼 보이는다면 실례합니다. 나는 이것이 가능하다는 것을 확신한다, 나는 단지 주문을 모른다.

답변

0

onHandlerNotFound으로 충분하지 않습니까?

당신은 /admin/로 시작하는 경로에 대한 다른 오류에 응답에 추가 검사를 할 수 있습니다.

+0

경로 파일 (OPTIONS/admin/* url controllers.admin.Admin.options (url : String))의 모든 옵션을 내 wildcarding으로 인해 작동하지 않을 것이라고 생각합니다.이 와일드 카드로 수행 한 작업은 다음과 같습니다. 항상 핸들러가 있도록 만들었습니다. –