【问题标题】:Java Spark API basic auth. returns 401 when called from Angular appJava Spark API 基本身份验证。从 Angular 应用程序调用时返回 401
【发布时间】:2018-07-05 15:40:31
【问题描述】:

我为基本 api 配置了 java spark api。当我从 Postman 调用 URL(使用基本身份验证)时,它返回 JSON。但是当我从 Angular 4 应用程序调用相同的 URL 时,它返回:预检响应具有无效的 HTTP 状态代码 401。 角度的标题设置正确,我已经阅读了这个答案: Angular 2 - Response for preflight has invalid HTTP status code 401

而且我知道问题出在 API 中,但我不知道如何配置它以在身份验证之前允许来自浏览器的 OPTIONS。路由创建代码在下面的代码中

    private static void create_routes() {

    staticFileLocation("/static");

    Spark.options("/*", (request, response) -> {

        String accessControlRequestHeaders = request.headers("Access-Control-Request-Headers");
        if (accessControlRequestHeaders != null) {
            response.header("Access-Control-Allow-Headers", accessControlRequestHeaders);
        }
        String accessControlRequestMethod = request.headers("Access-Control-Request-Method");
        if (accessControlRequestMethod != null) {
            response.header("Access-Control-Allow-Methods", accessControlRequestMethod);
        }
        return "OK";
    });

    Spark.before((request, response) -> {
        response.header("Access-Control-Allow-Origin", "*");
    });

    RouteOverview.enableRouteOverview("/debug"); 
    path("/api", () -> {
        before("/*", new SecurityFilter(authConfig, "DirectBasicAuthClient"));
    });
    after("/api/*", (request, response) -> response.type("application/json"));

    new ApiController();
}

【问题讨论】:

    标签: java angular basic-authentication spark-java


    【解决方案1】:

    您必须添加 OPTION 作为请求方法:

    Spark.before((request, response) -> {
        response.header("Access-Control-Allow-Origin", "*");
        response.header("Access-Control-Request-Method", "GET,POST,PUT,DELETE,OPTIONS");
    });
    

    【讨论】:

    • 感谢您的快速回答,但遗憾的是错误仍然存​​在
    猜你喜欢
    • 1970-01-01
    • 2017-01-28
    • 2014-01-26
    • 2016-10-02
    • 2023-04-07
    • 2015-06-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多