【问题标题】:Mechanism/Technique for auditing API request/ interface methods审核API请求/接口方法的机制/技术
【发布时间】:2019-08-24 01:12:19
【问题描述】:

在我的 Web-API 中,我在接口级别声明了各种方法。每个方法的实现都是在服务级别编写的。在声明的每个方法中,我都添加了审计注释,就像这样

 CreateStackResponse createStack(@AuditId("id") String id, @AuditModule("module") String module, CreateStackRequest createStackRequest)

我的审核表列是:id、context-id、message、details、user-id、module、submodule、...

我如何构建一条消息(例如“创建堆栈请求由 abc 用户发起”)来存储。一种解决方案就像在服务级别上,我将调用一种方法(比如 logEvent(必需参数)),它将审计存储在数据库中。我们可以在接口级别使用简单的注释来做到这一点吗? 例如,我如何保存审计日志,如 aws elastic beanstalk 的事件选项卡中所示。

【问题讨论】:

    标签: java audit audit-logging


    【解决方案1】:

    注解本身不会为您的代码提供任何行为。所有这些注释都是它们的名字所暗示的......附加到您的代码的额外信息。当您的代码在运行时使用 introspection 来查看已编译代码的定义并根据这些注释执行操作时,注释的力量就会发挥作用。

    Spring 框架广泛地做到了这一点。它查看代码上的注释并使用它们来决定如何连接您的应用程序。它通常会围绕您自己的类创建包装类,以便它可以在您的代码之上注入自己的逻辑。

    你当然可以自己做这样的事情,但这不是微不足道的。我建议查看 AspectJ 或其他一些面向方面的编程 (AOP) 框架。我建议总体上研究面向方面编程的想法,因为您想要做的是它希望解决的最常见问题之一。使用 Spring 框架也可以很好地解决此类问题。它包括一个用于执行 AOP 的模块,“Spring AOP”。

    无论您如何使用注释来解决此问题,您都在谈论大量的学习,并且可能会重组您的代码以使用第三方包。您可能很想放弃使用注释的想法,而只是将简单的日志记录代码放入您的主要逻辑中。

    我刚刚在 Google 上搜索了 “使用面向方面的编程进行审计”,得到了很多有趣的结果。这是一个这样的打击。我不知道它是否是最适合您的资源,但它会让您了解我在这里所说的内容:

    http://idanfridman.com/2014/05/13/clean-auditing-infrastructure-for-your-app-using-aop-custom-annotations-and-reflection/

    【讨论】:

    • 好的,所以我将不得不在 AOP 方面进行更多研究。有时其他一些方法可以做很多事情。就像我的情况一样。我调用了启动 linux 实例 ec2 机器的方法,然后它通过创建 ssh 连接在该 ec2 实例中创建用户。所以这个创建用户也应该得到审计记录。表示创建机器,发送创建机器请求,机器创建成功,实例中创建abc用户,成功创建abc用户。按此顺序
    • 是的,我明白了。 AOP 在这方面是惊人的。一旦你克服了设置它的困难,这几乎是魔法。最主要的是它几乎是完全透明的,因此您可以获得非常强大的审计,而无需使用日志调用来破坏您的代码。如果操作正确,它还可以捕获未应用日志记录的情况,因此错过了所需的审计点。 - 我喜欢你的想法,顺便说一句,用注释指导审计。您的 AOP 代码完全没有理由无法根据这些信息查找这些注释并分类和引导日志条目。
    • 我们不能在 aop 注释中使用动态值。所以我最终添加了我想要审计的方法,我添加了我的 logEvent 方法,该方法采用所需的参数并将其存储在数据库中。它添加为阻塞队列
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-02-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多