防止直接调用我的Spring Boot Rest API

时间:2019-06-12 08:38:37

标签: spring-boot security

我有一个javascript文件(网站)使用了多个REST服务(在春季启动时),并且任何人都可以直接调用这些服务(您可以在任何浏览器上的开发人员控制台中看到API URL /参数)。 因此,我想防止直接调用API,当然这是从应用程序的正面进行的。

我看到可以使用具有弹簧安全性的API密钥,但是它可靠吗?因为我认为如果您使用开发人员控制台拦截消息,便可以看到密钥。

1 个答案:

答案 0 :(得分:0)

您可以执行以下操作:

  • 通过在全局或每个端点中设置所需的设置来禁用springboot应用程序中的CORS。

要设置每个端点的CORS:

@CrossOrigin(origins = "http://localhost:9000")
@GetMapping("/greeting")
public Test testing(@RequestParam(required=false, defaultValue="Test") String name) {
    System.out.println("in test");
    return new Testing(10, String.format(template, name));
}
  • 您可以使用spring security对控制器端点进行预授权,以确保只有授权者才能访问控制器。

例如:

@RestController
@RequestMapping({"/v2/"})
public class ExampleTestController {
    @PreAuthorize("hasAuthority('ROLE_ADMIN')")
    @RequestMapping(value = "/test", method = RequestMethod.GET)
    String test() {
        return "Hello";
    }
}

使用spring安全性是安全的,因为总是在授予访问权限之前验证用户。即使在使用Oath2时,生成的密钥仍在验证用户登录后,并且可以通过在标头中传递请求或在其余模板中使用该密钥来验证对控制器的每个请求。

  • 隔离其余端点的另一种方法是使用负载平衡器(或ngnix或其他任何工具)阻止来自域外部的对这些端点的请求。