Java 标识API方法的调用代码路径

Java 标识API方法的调用代码路径,java,spring,Java,Spring,我感兴趣的是找到一种模式或策略,用于识别哪些代码路径称为特定的API方法(或一组方法) 以下是我的应用程序中的一些差异示例: 调用方通过公开的REST控制器调用API 调用方通过其他一些内部API调用API 调用方通过用户创建的插件调用API 该应用程序使用Spring进行核心布线以及Spring安全性。但是,调用方可以是任何用户,因此使用Spring安全上下文检查身份验证或其相关授权似乎并不合适。同一个用户可以通过一个公开的RESTURI调用API方法,或者通过任意插件输入方式调用API方法

我感兴趣的是找到一种模式或策略,用于识别哪些代码路径称为特定的API方法(或一组方法)

以下是我的应用程序中的一些差异示例:

  • 调用方通过公开的REST控制器调用API
  • 调用方通过其他一些内部API调用API
  • 调用方通过用户创建的插件调用API
  • 该应用程序使用Spring进行核心布线以及Spring安全性。但是,调用方可以是任何用户,因此使用Spring安全上下文检查身份验证或其相关授权似乎并不合适。同一个用户可以通过一个公开的RESTURI调用API方法,或者通过任意插件输入方式调用API方法

    如何管理这种类型的标识,而不为不同的入口点公开额外或半重复的API?我希望能够识别特定呼叫的起始位置。根据调用是否来自我们的一个REST端点,而不是一个用户生成的插件,以及其他一些用户生成的插件,可能会出现功能上的细微差异

    这可能暗示使用某种形式的拦截/方面,但我无法控制插件代码,因为我没有生成它。插件必须注册才能集成,因此有一个编程挂钩


    正在寻找关于如何管理此类问题的建议,无论是使用额外的Spring特性功能,还是其他想法或库。

    事实上,这是一个很好的问题

    据我所知,有以下几种选择:

    • 半复制API(上文已提及)
    • 不同用户(或用户组)
    • 使用反射获取调用堆栈(但很难做到,不推荐)
    • 您可以使用某种授权令牌“每会话”来代替用户,并查看会话是通过HTTP调用创建的还是“内部”会话
    • 检查某种会话id并保存在创建会话的会话中(内部或外部…)
    现在我看不到任何其他的可能性

    ps:要将会话“标记”为内部/外部会话,可以通过添加自己的spring处理程序来完成

    希望这能给你带来正确的观点,帮助你走出困境