我有一个 Java 应用程序,用户可以在其中加载第三方“插件”以增强用户体验。存在供这些插件使用的 API,但出于安全考虑,应限制第三方软件访问内部应用程序类。插件的受限包是“com.example”,允许的是“com.example.api”。API 类确实调用了内部的混淆类。
在研究了这个之后,我遇到了 SecurityManager 的几个方法:checkMemberAccess(Class, int)和checkPackageAccess (String),它们似乎都是实现我目标的可行途径。但是,在做了一些测试和进一步研究之后,我发现checkMemberAccess只适用于反射调用,而checkPackageAccess只有在类加载器调用loadClass时才会被调用。
限制对包(com.example,但不是 com.example.api)的访问的合理方法是什么?