美文网首页
代理模式(Proxy Pattern):权限校验API调用实战案

代理模式(Proxy Pattern):权限校验API调用实战案

作者: 肖哥弹架构 | 来源:发表于2024-07-18 09:15 被阅读0次
image.png

在微服务架构的企业应用平台中,不同的服务可能需要不同的权限校验。例如,访问用户信息的API需要管理员权限,而访问公共数据的API则不需要。为了集中管理权限控制,而非在每个服务中分别实现,我们使用代理模式来为服务调用添加权限校验逻辑。

2. 为什么要使用代理设计模式

代理模式可以在不修改原始服务代码的前提下,通过代理类来统一处理权限校验。这有助于保持服务代码的简洁性,同时集中管理权限控制逻辑。

3. 标准代理设计模式图

image.png

4. 业务代理设计模式图

image.png

5. 业务代码参考


    // 定义API服务接口
    interface APIService {
        String execute();
    }

    // 用户信息服务实现
    class UserAPIService implements APIService {
        @Override
        public String execute() {
            // 执行获取用户信息的操作
            return "User information retrieved";
        }
    }

    // 代理类抽象
    abstract class APIProxy {
        protected APIService apiService;

        public APIProxy(APIService apiService) {
            this.apiService = apiService;
        }

        public String execute() {
            // 可以在这里添加额外的逻辑,比如日志记录、性能监控等
            return apiService.execute();
        }
    }

    // 管理员API代理实现
    class AdminAPIProxy extends APIProxy {
        public AdminAPIProxy(APIService apiService) {
            super(apiService);
        }

        @Override
        public String execute() {
            if (checkPermission()) {
                // 权限校验通过,执行实际服务操作
                return apiService.execute();
            } else {
                // 权限不足,返回错误信息
                return "Access denied: insufficient permissions";
            }
        }

        private boolean checkPermission() {
            // 这里实现具体的权限校验逻辑,例如查询用户角色、权限等
            // 假设总是返回true
            return true;
        }
    }

    // 客户端使用
    class EnterpriseApplication {
        public static void main(String[] args) {
            APIService userApiService = new UserAPIService();
            AdminAPIProxy adminApiProxy = new AdminAPIProxy(userApiService);

            // 执行操作,通过代理校验权限
            String result = adminApiProxy.execute();
            System.out.println(result);
        }
    }
    

6. 使用代理设计模式的好处

代理模式解决了以下问题并带来了以下好处:

  • 权限控制集中管理:所有权限校验逻辑都集中在代理类中。
  • 扩展性:新增权限校验规则或修改现有规则时,不需要修改服务类代码。
  • 透明性:对客户端透明,客户端通过代理类访问服务,就像直接访问服务一样。

7. 其他使用代理设计模式场景参考

代理模式适用于需要在不修改原始对象的情况下,为其添加额外功能的任何场景,例如:

  • 延迟初始化:为对象的创建提供延迟加载的能力。
  • 日志记录:为方法调用添加日志记录功能。

8. 可参考开源框架

  • Spring Framework:在Spring中,代理模式被广泛应用于AOP(面向切面编程),用于在方法调用前后添加额外逻辑。

总结

代理模式是一种强大的设计模式,它通过引入代理对象来控制对原始对象的访问。这使得我们可以在不修改原始对象代码的情况下,为其添加额外的功能,如权限校验、延迟加载等。

历史热点文章

相关文章

网友评论

      本文标题:代理模式(Proxy Pattern):权限校验API调用实战案

      本文链接:https://www.haomeiwen.com/subject/cwochjtx.html