如何添加不重新编译就无法删除的过滤器/AOP 方法?
How to add filter / AOP method that cannot be removed without recompile?
我的问题是:如何添加一个 servlet 过滤器,或 Spring AOP 方法(或第三种解决方案 - 你的名字),如果不重新编译就无法从 Web 应用程序中删除?
我想以这种方式解决许可证处理问题,但如果有人修改 web.xml 或 Spring 配置,保护就会消失。
许可处理绝对是一个可以(并且 IMO 应该)通过 AOP 建模的交叉问题。
- 我对 servlet 过滤器不能说太多,在这方面没有经验,但是
- 我知道SpringAOP是proxy-based的,即不直接修改源码,这不是你想要的
- AspectJ,另一方面,当在编译时使用时(不是通过加载时织入,这是 Spring 中的常用方法),会将方面代码直接编译到您的核心中 class 文件,"baking" 将它们放入您的字节代码中。这可能就是你想要的。我并不是说它不能被逆向工程 - 总是有这个选项 - 但代码不会 运行 如果没有 class 路径上的 AspectJ 运行time 并且你无法删除许可方面无需重新编译。所以这是我为此目的推荐的选项。
顺便提一下,这个问题很有趣。
我的问题是:如何添加一个 servlet 过滤器,或 Spring AOP 方法(或第三种解决方案 - 你的名字),如果不重新编译就无法从 Web 应用程序中删除?
我想以这种方式解决许可证处理问题,但如果有人修改 web.xml 或 Spring 配置,保护就会消失。
许可处理绝对是一个可以(并且 IMO 应该)通过 AOP 建模的交叉问题。
- 我对 servlet 过滤器不能说太多,在这方面没有经验,但是
- 我知道SpringAOP是proxy-based的,即不直接修改源码,这不是你想要的
- AspectJ,另一方面,当在编译时使用时(不是通过加载时织入,这是 Spring 中的常用方法),会将方面代码直接编译到您的核心中 class 文件,"baking" 将它们放入您的字节代码中。这可能就是你想要的。我并不是说它不能被逆向工程 - 总是有这个选项 - 但代码不会 运行 如果没有 class 路径上的 AspectJ 运行time 并且你无法删除许可方面无需重新编译。所以这是我为此目的推荐的选项。
顺便提一下,这个问题很有趣。