审核API请求/接口方法的机制/技术

时间:2019-04-02 16:18:16

标签: java audit audit-logging

在我的Web-API中,我在接口级别声明了各种方法。每种方法的实现都是在服务级别上编写的。在声明的每种方法中,我都添加了审核注释,例如

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

我的审核表列是:id,上下文ID,消息,详细信息,用户ID,模块,子模块......

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

message shown in details column is dynamic

1 个答案:

答案 0 :(得分:1)

注释本身不会为您的代码提供任何行为。所有这些注释就是它们的名字所隐含的含义……附加在您代码中的附加信息。当您拥有在运行时使用内省的代码查看编译后的代码的定义并根据这些注释执行操作时,注释的功能就会发挥作用。

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/