亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

在 java 中的 AWS lambda 函數中包含 Access-control-header

在 java 中的 AWS lambda 函數中包含 Access-control-header

滄海一幻覺 2022-07-06 09:59:34
我一直在嘗試部署一個 lambda 函數,然后通過 API 網關使其可訪問。我的 java 函數在 JAVA 中,這是我在 JAVA 中創建一個簡單的 AWS lambda 函數所遵循的文檔:https://docs.aws.amazon.com/lambda/latest/dg/java-handler-io-type-pojo.html這是我的函數處理程序的外觀:package lambda;    import com.amazonaws.services.lambda.runtime.Context;    import com.amazonaws.services.lambda.runtime.RequestHandler;    import lambda.axon.Path;    public class shortestPath implements RequestHandler<RequestClass, ResponseClass>{        public ResponseClass handleRequest(RequestClass request, Context context){            String inputString = request.inputString;            int steps = Path.stepsTo(inputString);            return new ResponseClass(steps);        }    }這是這個請求類:package lambda;public class RequestClass {    String inputString;    public String getInputString() {        return inputString;    }    public void setInputString(String inputString) {        this.inputString = inputString;    }    public RequestClass(String inputString) {        this.inputString = inputString;    }    public RequestClass() {    }}這是響應類:package lambda;public class ResponseClass {    int steps;    public ResponseClass(int steps) {        this.steps = steps;    }    public ResponseClass() {    }    public int getSteps() {        return steps;    }    public void setSteps(int steps) {        this.steps = steps;    }}我在aws上部署它并配置AWS api網關來觸發它,當我使用郵遞員時,當我到達API網關給出的端點時一切正常(https://www.getpostman.com/)但是通過瀏覽器嘗試相同的操作會給我一個 CORS 錯誤:Access to XMLHttpRequest at 'https://<hash>execute-api.us-east-1.amazonaws.com/dev' from origin 'http://localhost:4200' has been blocked by CORS policy: Request header field access-control-allow-origin is not allowed by Access-Control-Allow-Headers in preflight response.我嘗試在 API 網關控制臺中啟用 CORS,然后重新部署它:這篇 Stackoverflow 帖子(在 AWS Lambda 上配置 CORS 響應標頭?)說如果我使用 lambda-proxy,我應該在處理程序響應本身中包含標頭,我不確定代理是什么,但我如何用我當前的Lambda 函數的實現,即在我的響應中包含自定義標頭
查看完整描述

2 回答

?
largeQ

TA貢獻2039條經驗 獲得超8個贊

要啟用cors連接到 lambda 函數的 api 網關端點,您必須為 api 端點啟用 cors(您已經完成)并配置您的 lambda 函數 suport cors。


按照我的例子:


// new respose class, replace for your class - ResponseClass

public class Response {


    private int statusCode; // http status code


    private Map<String, String> headers; // headers


    private String body; // body - what you want to return to client


    public Response(int statusCode, Map<String, String> headers, String body) {

        this.statusCode = statusCode;

        this.headers = headers;

        this.body = body;

    }


    public int getStatusCode() {

        return statusCode;

    }


    public Map<String, String> getHeaders() {

        return headers;

    }


    public String getBody() {

        return body;

    }


    public void setStatusCode(int statusCode) {

        this.statusCode = statusCode;

    }


    public void setHeaders(Map<String, String> headers) {

        this.headers = headers;

    }


    public void setBody(String body) {

        this.body = body;

    }


}


/// -------------


package lambda;


    import com.amazonaws.services.lambda.runtime.Context;

    import com.amazonaws.services.lambda.runtime.RequestHandler;

    import lambda.axon.Path;


    public class shortestPath implements RequestHandler<RequestClass, Response>{


        public Response handleRequest(RequestClass request, Context context){

            String inputString = request.inputString;

            int steps = Path.stepsTo(inputString);


            Map<String, String> headers = new HashMap<>();

            headers.put(Access-Control-Allow-Origin, "*"); // cors header, you can add another header fields


            return new Response(200, headers, "" + steps);

            // return new Response(200, headers, "{result: " + steps + "}");

            // simple json response. ex: {result: '3433"}

        }

    }

我的方式僅在 api 網關使用LAMBDA-PROXY事件配置時生效(默認)

http://img1.sycdn.imooc.com//62c4ecae00018a5709200454.jpg

查看完整回答
反對 回復 2022-07-06
?
慕哥9229398

TA貢獻1877條經驗 獲得超6個贊

您可以從 api 網關啟用 cors 您可以從 lambda 管理 cors 并從 lambda 管理標頭。


我建議從 api 網關啟用 cors 并測試它是否可以工作。


你可以管理access-control-origin并headers喜歡這種方式


'use strict';


module.exports.hello = function(event, context, callback) {


const response = {

  statusCode: 200,

  headers: {

    "Access-Control-Allow-Origin" : "*", // Required for CORS support to work

    "Access-Control-Allow-Credentials" : true // Required for cookies, authorization headers with HTTPS 

  },

  body: JSON.stringify({ "message": "Hello World!" })

};


callback(null, response);

};

您可以參考此文檔: https ://serverless.com/framework/docs/providers/aws/events/apigateway/


查看完整回答
反對 回復 2022-07-06
  • 2 回答
  • 0 關注
  • 167 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號