angularjs - cómo habilitar CORS con Vert.x 2.x
(2)
Estoy tratando de realizar solicitudes entre dominios con Angularjs 1.4.5. Pero no puede tener éxito He configurado $ httpprovider
.config([''$httpProvider'', function($httpProvider) {
$httpProvider.defaults.useXDomain = true;
delete $httpProvider.defaults.headers.common[''X-Requested-With''];
$httpProvider.defaults.headers.common[''Accept'']= "application/json, text/plain, */*";
$httpProvider.defaults.headers.put["Content-Type"] = "application/x-www-form-urlencoded;charset=utf-8";
$httpProvider.defaults.headers.post["Content-Type"] = "application/x-www-form-urlencoded;charset=utf-8";
$httpProvider.interceptors.push(''authenticationFailedInterceptor'');
}])
Pero aún no tienes éxito. Cómo habilitar el soporte CORS con el servidor http Vert.x 2.x.
CORS es compatible con Vert.x 3.x, pero ahora no puedo actualizar Vert.x.
¿Has intentado con algo como esto en tus respuestas?
vertx.createHttpServer()
.requestHandler(function (req) {
req.response()
.putHeader("content-type", "text/plain")
.putHeader("Access-Control-Allow-Origin", "*")
.putHeader("Access-Control-Allow-Methods", "GET, POST, OPTIONS");
.putHeader("Access-Control-Allow-Headers", "Content-Type, Authorization");
.end("Hello from Vert.x!");
}).listen(8080);
de seguro, tiene que modificar esto según sus necesidades ... pero los cambios deben hacerse en el servidor y, al menos, necesita estos tres encabezados.
Ejemplo completo para habilitar cors:
Necesitamos crear dos rutas de coincidencia.
Uno ayuda a permitir que cors y otros manejen las solicitudes.
Debajo está para habilitar cors. Acepta todas las solicitudes y agrega todas las cabeceras necesarias para habilitar cors. Después de eso tenemos que entregar la solicitud al enrutador de ruta real para manejar la solicitud. Tenemos eso por el nombre 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);
}
});
Otra ruta de coincidencia:
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;
}
}
Ahora, finalmente, agregue requestHandler al servidor:
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());
}
}
});
Es posible que tenga una pregunta ¿Para qué sirve el controlador de solicitud de tipo de opciones http? La respuesta es que es muy interesante. Javascript es un lenguaje seguro que no permite la solicitud HTTP de origen cruzado. Por lo tanto, para permitir el origen cruzado solicite javascript, envíe una solicitud de tipo de opciones para cada solicitud de solicitud http y verifique si CORS es compatible o no. En dicho servidor hits de Javascript dos veces uno para comprobar cors es compatible o no y uno para capturar datos.