如何使用AOP拦截File,FileReader,FileWriter,FileInputStream和FileOutputStream的构造函数?

快乐工程师

我想拦截File,FileReader,FileWriter,FileInputStream和FileOutputStream的构造函数,并防止任何文件名包含“ ..”(以防止路径遍历攻击)或“ \ 0”(以防止文件名为空字符攻击)。

我还有一个关于如何使用SecurityManager进行相同操作的未解决问题,但是还没有人回答,所以我希望这种替代方法可以工作。

这是用于tomcat上的spring webapp。

我知道我可以通过创建自己的SafeFile,SafeFileReader等类并修改代码以使用这些类来手动执行此操作。但是,在我们的代码中有960个位置使用了那些对象的构造函数,因此,我希望避免这种情况,除非这是唯一的方法。

克里加克斯

即使Sotirios Delimanolis链接到此处的答案是正确的(我自己写的),对于AspectJ而不是基于代理的Spring AOP是必需的,但请注意,您不能将其execution(*.new(..))用于JDK类,因为默认情况下,它们不包括在Aspect Weave中为了编织到JDK类中(执行连接点在逻辑上位于被调用者代码中),您需要修改JDK的rt.jar或至少将修改后的JDK类放在JDK本身之前的bootclasspath上。这是可能的,但并非无关紧要。

但是,还有一个更简单的选择:编织成来电者(你自己的代码),而不是通过被调用者call(*.new(..))-记之间的差异call()execution()反过来,这意味着您无法拦截不是通过您自己的编织代码或JDK本身进行的JDK类的调用。因此,即使对于不在您自己控制范围内的代码,即使您需要100%的解决方案,也将最终编织JDK。但是,如果您只想保护自己的类,则可能没有必要。:-)

尽管我是AspectJ的忠实拥护者,但我想强调一点,我还是干净代码和重构的坚定支持者。任何像IntelliJ IDEA或Eclipse这样的体面的IDE都应该使重构960调用非常简单,以使用您建议的安全包装类。如果它是如此重要,为什么不这样做呢?IDEA的结构化搜索和替换功能可在数分钟(甚至几秒钟)内为您完成。AOP可以但不应用于弥补您自己代码的缺陷。因此,请重构,之后您会更加快乐。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

Filewriter和FileReader的问题

FileInputStream和FileOutputStream如何在Java中工作?

为什么FileReader和FileWriter使用INT变量进行读写?

如何拦截超类构造函数的参数?

如何使用setInterval和构造函数?

如何从构造函数使用和打印

FileWriter无法解析构造函数

Scala / Spark中的静态方法和构造函数拦截模拟

构造函数拦截器之前和之后

是否可以使用ByteBuddy拦截数组构造函数?

FileInputStream与FileReader

在JAVA中与FileDescriptor的入和出静态成员一起使用时,FileInputStream和FileOutputStream类的异常行为

C ++:如何使getter和setter使用空的构造函数

为什么FileWriter和FileOutputStream有不同的例外?

FileInputStream 和 FileOutputStream:读写同一个文件

如何使用拦截URL模式和访问?

Java中的FileWriter与FileOutputStream

初始化时如何在类的构造函数调用中容纳InputStream对象的FileInputStream对象?

如何使用 FileWriter

BufferedReader构造函数对FileReader的期望是什么

Ionic:undefined不是构造函数FileReader

AspectJ不会拦截带注释的构造函数

构造函数上的拦截导致ClassNotFoundException

用Byte Buddy拦截默认构造函数

AspectJ,无法拦截super()构造函数调用

使用AOP拦截私有注释方法

使用Spring AOP拦截Jersey资源方法

如何将TypeScript构造函数参数属性与类继承和超类构造函数结合使用?

如何使用函数成员和默认公共构造函数创建 F# 结构?