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

如何阻止从Postman/其他API的/etc...(Spring Boot)访问我的API

陶超
2023-03-14

我正在使用Spring Boot和Spring Security开发一个Rest Api。我有公共和私人区域,我使用Spring Security进行身份验证(用于私人区域)。

问题是,我配置了CORS,如果我从未经授权的url调用公共endpoint,它会阻止请求,但我很惊讶,如果我从Postman或其他使用RestTemplate的Spring Boot应用调用它,CORS不会阻止请求并返回结果。

我在网上看到CORS只会屏蔽来自浏览器的呼叫。。那么,如何保护API的公共部分不被Postman或其他API调用呢?

@Bean
    CorsConfigurationSource corsConfigurationSource() {
        CorsConfiguration configuration = new CorsConfiguration();
        configuration.setAllowedOrigins(Arrays.asList("http://localhost:4200","http://localhost:4201"));
        configuration.setAllowedMethods(Arrays.asList("GET","POST","DELETE"));
        UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource();
        source.registerCorsConfiguration("/**", configuration);
        return source;
    }

共有2个答案

戚阳
2023-03-14
private Map<String, String> getRequestHeadersInMap(HttpServletRequest request) {

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

    Enumeration headerNames = request.getHeaderNames();
    while (headerNames.hasMoreElements()) {
        String key = (String) headerNames.nextElement();
        String value = request.getHeader(key);
        result.put(key, value);
    }

    return result;
}
雍焱
2023-03-14

恐怕没有解决方案。在Postman中,您可以添加任何您想要的标头。因此,如果您拥有所有必要的令牌,则可以模仿任何客户端。此外,CORS略有不同的目的:

CORS的用例很简单。想象一下爱丽丝的网站。com上有一些数据显示该网站是bob。com想要访问。在浏览器的同源策略下,传统上不允许此类请求。然而,通过支持CORS请求,alice。com可以添加一些特殊的响应头,以允许bob。com访问数据。

您可以在这里找到其他信息:https://medium.com/@baphim ot/理解-cors-18ad6b478e2b

 类似资料:
  • 问题内容: 我使用Minify来缩小并缓存所有脚本请求。 我只希望我的用户能够访问JavaScript文件的缩小版本。 Minify位于,我的脚本位于。如何阻止直接访问未缩小的JavaScript文件所在的位置。我宁愿不要将它们从文档根目录中删除,但这是一个选择。 请注意,我使用的是Zend Framework,因此应用程序的实际根目录已移至。htaccess文件可处理重写。 问题答案: 您不能仅

  • 如果我尝试调用GMail API,我会得到以下错误: 首先我生成一个代币 接下来我测试令牌 我得到一个错误400错误的请求作为回报。但如果我使用不同的范围,例如谷歌,我会得到200 ok。 我认为错误是“sub”:客户的电子邮件。我尝试在谷歌控制台中添加更多的GMail,有3封邮件是自动为项目创建的,只有来自Json的邮件返回我失败,如果尝试其他邮件,包括自动为项目创建的邮件和我自己的GMail(

  • 问题内容: 我的班级有一个名为DataStorage的哈希图: 如何在另一个类中访问此HashMap中的数据? 问题答案: 将HashMap创建为实例变量,并提供一种将其访问类API的方法:

  • 问题内容: 我有我在create()方法中创建的对象编号列表,我想访问它,以便可以在question()方法中使用它。 还有可能我可能错过的另一种方法吗?我搞砸了吗?如果没有,我应该如何获得与以下相同的功能? 问题答案: 有趣的是,列出的两个答案都忽略了发问者正在使用静态方法的事实。因此,除非类类或成员变量也被声明为静态或静态引用,否则该方法将无法访问任何类或成员变量。这个例子: 会起作用的,但是

  • 问题内容: 我正在研究android voip应用程序。我想确定是否还有其他应用程序正在使用麦克风。因此,我想防止在使用时从其他应用程序访问麦克风。 请任何人有想法,这将对我非常有帮助。 谢谢, 问题答案: 终于知道我们可以按以下方式检查麦克风的可用性:

  • 我在干什么? 步骤1-启用邻近API: 为了使用接近API,它必须首先在谷歌开发控制台中启用。使用本教程,我为我的项目启用了对邻近API的支持 步骤2-获取凭据: 根据本教程,我需要得到客户端ID和秘密。这就是我困惑的地方。凭据->添加凭据->OAuth2.0客户端ID->选择Chrome App单选按钮(因为我使用的是Postman)->输入Postman的Chrome Web store UR