资源保护

授权服务扩展组件中已经自动配置了 资源服务 的安全性。这个配置提供了可扩展点,可以用来配置任何需要保护的 URL 模式。

定义受保护的资源

假设我们有如下 REST 控制器:

@RestController
public class GreetingController {

    @GetMapping("/greeting/hello")
    public String hello() {
        return "Hello!";
    }

    @PostMapping("/greeting/hi")
    public String hi() {
        return "Hi!";
    }
}

如果需要用 access token 保护 /greeting/** 端点,需要定义一个实现 io.jmix.core.security.AuthorizedUrlsProvider 接口的 bean,并从 getAuthenticatedUrlPatterns() 方法返回 URL 模式列表:

@Component
public class GreetingAuthorizedUrlsProvider implements AuthorizedUrlsProvider {

    @Override
    public Collection<String> getAuthenticatedUrlPatterns() {
        return List.of("/greeting/**");
    }

    @Override
    public Collection<String> getAnonymousUrlPatterns() {
        return List.of();
    }
}

发送 access token

上面的配置完成后,所有发送到 /greeting/** 端点的请求都将需要包含 access token 的 Authorization 请求头。请求头的值必须带有 Bearer,后面跟上 token 值。示例:

GET /greeting/hello HTTP/1.1
Host: server.example.com
Authorization: Bearer <ACCESS_TOKEN>

保护通用 REST 组件端点

当应用程序中添加了 通用 REST 扩展组件后,所有的 REST 端点都自动会受到授权服务组件的保护。也就是说,访问任何 REST 端点时,都需要先获取 access token 并在 HTTP 请求的 Authorization 请求头中使用。请求头的值必须带有 Bearer,后面跟上 token 值。示例:

GET /rest/entities/User HTTP/1.1
Host: server.example.com
Authorization: Bearer <ACCESS_TOKEN>