我要做的是在Play 2.1应用程序中构建对CORS的支持。前提是在/ admin路径上的任何内容都需要在响应中获取CORS头。这与我通过StackOverflow拼凑在一起的剪切和粘贴解决方案相得益彰。我的每个Controller操作都利用一个包装的Action,将CORS头部推送到响应中。问题是我的天真实现现在在我的路由文件中不存在的URL的OPTIONS请求上返回200 OK!如何修改我的天真控制器以确认我的路由文件中存在URL,如果我找不到路由,则确认404 Not Found?
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)
我的管理控制器提供常用选项处理
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/sessions HTTP/1.1
HTTP/1.1 200 OK
和
OPTIONS /admin/sessions HTTP/1.1
HTTP/1.1 200 OK
但
OPTIONS /admin/bob HTTP/1.1
HTTP/1.1 404 Not Found
我是Scala和Play的新手,我发现Play 2.1文档对于使用路由的细节非常缺乏。如果这个问题看起来相当简单,请原谅。我确信这是可能的,我只是不知道咒语。
答案 0 :(得分:0)
常见的onHandlerNotFound
不够好吗?
对于以/admin/
开头的路径,您可以针对不同的错误进行额外的检查。