完整的示例,使CORS:
我們需要創建兩個途徑匹配。
有助於啓用cors和其他處理請求。
以下是啓用cors。它接受所有請求並添加所有需要的頭部以啓用Cors。之後,我們需要將請求交給實際的路由匹配器來處理請求。我們通過secureRoutes這個名字。
RouteMatcher routeMatcher = new RouteMatcher();
routeMatcher.options(".*",new Handler<HttpServerRequest>() {
@Override
public void handle(final HttpServerRequest request) {
request.response().putHeader("Access-Control-Allow-Origin", "*");
request.response().putHeader("Access-Control-Allow-Methods", "GET, POST, PUT, DELETE");
request.response().putHeader("Access-Control-Allow-Headers", "accept, authorization, content-type, email");
request.response().end();
}
})
.all(".*",new Handler<HttpServerRequest>() {
@Override
public void handle(final HttpServerRequest request) {
request.response().putHeader("Access-Control-Allow-Origin", "*");
secureRoutes.getRouteMatcher().handle(request);
}
});
另一條路線匹配:
public class SecureRoutes {
private static final RouteMatcher routeMatcher = new RouteMatcher();
@Inject
protected Container container;
@Inject
private SigninController signinController;
@Inject
private SignupController signupController;
@Inject
private OauthController oauthController;
@Inject
ClientNetworkSignalController clientNetworkSignalController;
public void initRoutes() {
// APP routes. they use User token for authentication
routeMatcher.get("/", new Handler<HttpServerRequest>() {
@Override
public void handle(final HttpServerRequest request) {
request.response().putHeader("Cache-Control",
"public, max-age=86400");
request.response().sendFile("web/public/index.html");
}
});
routeMatcher.post("/signin", signinController.signin());
routeMatcher.post("/signup", signupController.signup());
routeMatcher.post("/oauth2/token", oauthController.token());
routeMatcher.post("/oauth2/invalidate_token", oauthController.invalidateToken());
}
public RouteMatcher getRouteMatcher() {
return routeMatcher;
}
}
現在終於添加requestHandler到服務器:
server.requestHandler(routeMatcher).listen(port,
host, new Handler<AsyncResult<HttpServer>>() {
public void handle(AsyncResult<HttpServer> asyncResult) {
if (asyncResult.succeeded()) {
logger.info(s + ": Started on " + host + ":"
+ port);
} else {
logger.info(s + ": Unable to start server.\n "
+ asyncResult.cause());
}
}
});
你可能有一個問題,什麼是使用HTTP選項類型請求處理器。答案是非常有趣的。 Javascript是一種安全的語言,不允許跨源Http請求。所以,爲了允許交叉源請求javascript爲每個http請求請求發送一個選項類型請求並檢查天氣CORS是否被支持。在這樣的Javascript命中服務器兩次檢查cors是否支持和一個來捕捉數據。
謝謝你的時間。在這種情況下,我們只有一個請求處理程序。如果我們需要多個請求處理程序呢?我們是否需要將這些標頭放在每個請求處理程序中? –
因爲我不知道Vert非常好(它似乎是一個很棒的框架!)我不知道是否可以在默認標題中設置這種類型的東西。 WebAPI和ServiceStack允許它。 – Rafa