angular - 从 Angular UI 连接到 Java FN 时出现 CORS 问题
问题描述
我目前正在尝试解决我们在使用从 Angular 调用的 FN 项目函数查询数据库时遇到的 CORS 问题。fnproject/fn-java-fdk:1.0.83
FN函数是用 Java(数据库。数据库以查询结果进行响应,查询结果通过 FN 函数以适当的响应传递回 UI。
我尝试将 CORS 标头作为 htxc.setResponseHeader() 和 htxc.addResponseHeader()。我还尝试更改 func.yaml 以在其中包含 CORS 协议,而不是在函数内部,但这不起作用。此外,我尝试将"*"
标Access-Control-Allow-Origin
头中的 更改为我们也从中发出请求的特定 URL。我们还考虑添加许多不同的标头,Access-Control-Allow-Headers
希望其中一个可以解决问题。
import com.fnproject.fn.api.httpgateway.HTTPGatewayContext;
...
public class query_database {
/**
* @param input is a byte[] array with input, contains the request information
* @return List<dbObject> A list of DB Objects
*/
public List<dbObject> query(byte[] input, HTTPGatewayContext htxc){
// Takes care of the HTTP Gateway context
htxc.setResponseHeader("Access-Control-Allow-Origin", "*");
htxc.addResponseHeader("Access-Control-Allow-Methods", "POST, GET");
htxc.addResponseHeader("Access-Control-Allow-Headers", "Authorization, Origin, X-Requested-With, Content-Type, Accept, Content-Length, X-Experience-API-Version, X-Prototype-Version, Token, X-Auth-Token");
htxc.addResponseHeader("Access-Control-Allow-Credentials", "true");
if (htxc.getMethod().equals("OPTIONS")) {
return Collections.emptyList();
}
String str = new String(input);
JSONObject json = new JSONObject(str);;
Request request = new Request();
String system = json.getString("system");
request.setSystem(system);
queryFunc queryFunc = new queryFunc();
try {
return queryFunc.makeQuery(request);
} catch(DBConnection | HttpException |IOException | emptyStringException e) {
return Collections.emptyList();
}
}
}
在我们正在制作的 Angular 7 UI 中,当我们在 Chrome/Firefox 中打开它时会出现以下错误:
Cross-Origin Request Blocked: The Same Origin Policy disallows reading the remote resource at http://server.com:8080/t/function/function-trigger. (Reason: CORS header ‘Access-Control-Allow-Origin’ missing). (unknown)
尽管在 Java 代码中设置了“Access-Control-Allow-Origin”响应标头,但仍然如此。除此 CORS 错误外,该函数正常工作,因此我们相当确信它与标头有关。例如,JSON 响应是正确的。
有什么想法吗?当前的标头方法可能存在问题,或者它也可能在 Angular 方面。让我知道是否还需要澄清这个问题。
解决方案
推荐阅读
- javascript - Z-Index 在 React-Router 的多列菜单中不起作用
- javascript - Сhange 复选框以选择
- assembly - 哪些 PowerPC 指令将 r0 视为 0?
- go - 使用 kubernetes/go-client 无法从集群配置中恢复数据
- python - 使用 Python Paramiko 在不同的 SSH 服务器中并行运行多个命令
- python - 使用活动监视器 API 和 python 更新订阅者自定义字段
- javascript - 在节点 js 中填充
- linux - 如何在 Linux 虚拟机中下载最新版本的 Haskell?
- javascript - 如何使用 javascript 将图像附加到特定的网格项
- r - 多目标优化约束问题:R