当前位置: 首页 > 知识库问答 >
问题:

从Spring Boot RESTendpoint访问AWS Secrets Manager

凌通
2023-03-14

我试图通过在Spring Boot中配置的REST APIendpoint从AWS Secrets Manager获取凭据。如果我在endpoint的URL中键入参数,我就会得到所需的对象。具有endpoint的站点也通过AWS托管。

当我尝试从Angular development server访问endpoint时,我总是得到401个未经授权的权限。我使用Angular的代理来访问跨域endpoint,以便Cognito进行身份验证,在其他事情中命中Lambdaendpoint,并且从来没有遇到过问题,但我无法将其用于此Spring Bootendpoint。我不认为这是一个机密管理器,也不认为这是一个AWS问题,在与AWS支持进行了长时间的通话之后。

@GetMapping("/REST/getSecret")
    public String getSecret(@RequestParam String name) {
        String secretName = getSecretByName(name);

        JsonParser parser = new JsonParser();
        Object secretObj = parser.parse(secretName);
        JsonObject secretKeys = (JsonObject) secretObj;

        return secretKeys.toString();
}
getSecret(secretName: String): Observable<any> {
    const headers = new HttpHeaders({
      'Content-Type': 'application/json',
      'Cache-Control': 'public' // likely unecessary, was trying to make sure cache was clearing at the time
    });
    return this.http.get<any>(
      // this.secretConfig.getSecretUrl() + `/getSecret?name=${secretName}`, // Live Site
      this.secretConfig.getSecretUrl() + `/getSecret/${secretName}`, // Dev
      {
        headers: headers
      }
    ).pipe(map(secret => JSON.parse(secret)));
  }

现场评论只是显示什么工作,而整个事情是托管

"/getSecret": {
    "target": "https://websiteurl.com/REST/getSecret?name=",
    "secure": false,
    "logLevel": "debug",
    "changeOrigin": true
  }

代理配置看起来很有趣,但这正是我通过Lambda函数设置使用参数运行搜索的方式,并且按预期工作。

我现在唯一的猜测是,在尝试通过角度HTTP调用拉入数据时,可能需要在RESTendpoint上设置特定的头?如果是标题问题,那么我可能可以在8080上运行Spring Boot,在4200上运行Angular,在本地测试所有内容。当前,当两个实例都在本地运行时,会发生相同的错误。

非常感谢您的帮助!

共有1个答案

林和畅
2023-03-14

我能够通过向endpoint添加@CrossOrigin注释并通过applications.properties文件在本地打开一些安全设置来实现这一点。Java和Spring是新手,所以非常不熟悉框架的工作原理。

@CrossOrigin(origins = "*", allowHeaders = "*")
@GetMapping("/REST/getSecret")
 类似资料:
  • 问题内容: 我需要一个允许我使用Java在Gmail中进行电子邮件操作(例如,发送/接收邮件)的库。 问题答案: 您是否看到过Java的g4j-GMail API? GMailer Java版API(g4j)是一组API,允许Java程序员与GMail进行通信。借助G4J,程序员可以制作基于GMail大量存储的基于Java的应用程序。

  • 问题内容: 我被困在一个相当复杂的Python模块中,该模块不会返回有用的错误代码(它实际上会无声地失败而失败)。但是,它调用的基础C库设置了errno。 通常,errno是通过OSError属性传入的,但是由于我没有异常,因此无法理解。 使用ctypes时,libc.errno不起作用,因为errno是GNU libc中的宏。Python 2.6有一些优势,但Debian仍使用Python 2.

  • 问题内容: 您如何从Java 访问? 最后一行使编译器死于“ scala类型。None不带参数”。 由于“找不到符号构造函数None()”而失败: 由于“找不到符号变量无”而失败: 在2007年,这曾经奏效,但后来Scala改变了。Java编译器提供: 问题答案: 这可能起作用: def apply [A](x:A):Option [A] 一个Option工厂,如果参数不为null,则创建Some

  • 问题内容: 我在访问SimpleXML对象的部分时遇到问题。当我整个对象时,我得到正确的输出,而当我其余对象(嵌套标签)时,我得到正确的输出,但是当我遵循docs和时 ,我得到一个空对象,尽管事实是第一个清楚地表明,存在要输出的属性。 任何人都知道我在这里做错了/如何进行这项工作? 问题答案: 您可以通过在XML节点上调用attribute()函数来获取XML元素的属性。然后,您可以var_dum

  • 目前正在尝试从JAVA访问类型库文件,我尝试了以下操作并出现了相应的错误: 1- Com2Java:每次尝试连接到我的应用程序时,我都会收到此错误: 默认情况下,在客户端版本的Windows上不启用小型转储 2- Com4j:它只产生接口,无法理解如何使用它们(我找不到任何类,只有接口) 3-经过小搜索,发现了Visual J,但无法下载它,因为它被剥夺了。 任何人都可以提供建议吗? 非常感谢。

  • 问题内容: 我有一个要求,即只能从本地主机访问mysql数据库。我必须实现一个可以访问数据库的servlet,以允许该系统中的其他服务器访问数据(servlet可以充当代理)。但是,此系统由一个远程服务器组成,该服务器下载执行以下语句的大部分数据: 有人可以建议我如何编写一个以有效方式流式传输此类数据的servlet吗(我是数据库新手)? 问题答案: 首先,我不建议为此使用servlet。有关正确

  • 问题内容: 因此,我有一个用于列表视图的onItemLongClickListener,该列表视图传递了一个参数“ int位置”。在内部,我有一个带有两个按钮的alertDialogBu​​ilder。我还有另一个按钮的onclickListener。我需要从第二个侦听器内部访问该位置。反正有没有做到这一点而不使其成为全球性的呢? 谢谢你的帮助。 问题答案: 在Java中,只有先将内部变量声明为,

  • 问题内容: 我有一个UIAlertController,当用户在TouchID屏幕上选择“输入密码”时,系统会提示用户。在屏幕上显示此内容后,如何恢复用户的输入? 我知道“确定”按钮可能应该有一个处理程序,但是现在此代码实际上并没有执行任何操作,但是我想通过println显示文本字段的输出。对于我来说,这实际上只是一个测试应用程序,用于学习Swift和一些新的API知识。 问题答案: 我知道已经发