Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/351.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 基于KeyClope注释的资源配置_Java_Spring Boot_Microservices_Keycloak - Fatal编程技术网

Java 基于KeyClope注释的资源配置

Java 基于KeyClope注释的资源配置,java,spring-boot,microservices,keycloak,Java,Spring Boot,Microservices,Keycloak,我最近与microservices合作,开发为Spring Boot应用程序(v2.2),在我的公司,我们使用KeyClope作为授权服务器。 我们之所以选择它,是因为我们需要复杂的策略、角色和组,而且我们还需要用户管理的授权(UMA)来在用户之间共享资源 我们用一个域和多个客户机(每个微服务一个客户机)配置了KeyClope。 现在,我明白了我需要在keydove中显式定义资源,这很好,但问题是:我真的需要在microservice的属性文件中复制所有资源吗? 所有文档、示例和教程的结尾都是一

我最近与microservices合作,开发为Spring Boot应用程序(v2.2),在我的公司,我们使用KeyClope作为授权服务器。 我们之所以选择它,是因为我们需要复杂的策略、角色和组,而且我们还需要用户管理的授权(UMA)来在用户之间共享资源

我们用一个域和多个客户机(每个微服务一个客户机)配置了KeyClope。 现在,我明白了我需要在keydove中显式定义资源,这很好,但问题是:我真的需要在microservice的属性文件中复制所有资源吗? 所有文档、示例和教程的结尾都是一样的,就像:

keycloak.policy-enforcer-config.enforcement-mode=PERMISSIVE
keycloak.policy-enforcer-config.paths[0].name=Car Resource
keycloak.policy-enforcer-config.paths[0].path=/cars/create
keycloak.policy-enforcer-config.paths[0].scopes[0]=car:create

keycloak.policy-enforcer-config.paths[1].path=/cars/{id}
keycloak.policy-enforcer-config.paths[1].methods[0].method=GET
keycloak.policy-enforcer-config.paths[1].methods[0].scopes[0]=car:view-detail
keycloak.policy-enforcer-config.paths[1].methods[1].method=DELETE
keycloak.policy-enforcer-config.paths[1].methods[1].scopes[0]=car:delete
(第二个示例更适合我们的情况,因为每个http方法使用不同的授权范围)

在现实生活中,我们正在开发的每个微服务都有几十个端点,在我看来,一个一个地定义它们是浪费时间,也是代码健壮性的一个弱点:我们更改一个端点,我们需要在KeyClope和应用程序属性中重新配置它

有没有办法在控制器级别使用某种注释?类似于以下伪代码:

@RestController
@RequestMapping("/foo")
public class MyController {
    
    @GetMapping
    @KeycloakPolicy(scope = "foo:view")
    public ResponseEntity<String> foo() {
       ...
    }

    @PostMapping
    @KeycloakPolicy(scope = "bar:create")
    public ResponseEntity<String> bar() {
       ...
    }

}
@RestController
@请求映射(“/foo”)
公共类MyController{
@GetMapping
@密钥策略(scope=“foo:view”)
公众回应{
...
}
@邮戳
@keydeposepolicy(scope=“bar:create”)
公众响应栏(){
...
}
}

最后,我开发了自己的项目,为需要用作资源服务器的spring boot项目提供自动配置功能

该项目以MIT2许可证发布,可在my github上获得:

您找到了解决方案吗?是的,我已经通过基于swagger api为KeyClope编写了一个自动配置程序实现了这一点。我会尽快在github上发布一份草稿