我使用反射调用类的私有构造函数,以解决声纳扫描报告显示的分支覆盖问题不足。这是我工作的代码的片段:
// reflection to access a private constructor of a class
Constructor<CMISBridgeMaps> c = CMISBridgeMaps.class.getDeclaredConstructor(new Class[0]);
c.setAccessible(true);
cmisBridgeMaps = c.newInstance(new Object[0]);
以上代码解决了我的声纳扫描关键问题。但遗憾的是,fortify现在在以下行中显示 Access说明符操作 问题:
c.setAccessible(true);
如何解决强化和sonarcube问题?任何帮助将不胜感激。
答案 0 :(得分:1)
我相信您不需要在UNIT TC上运行强化扫描。在编写它们以验证您的代码时,它们不会遇到您的生产/实际环境。
答案 1 :(得分:1)
你可以使用Java的反射api来解决这个问题。以下是我用于同一问题的解决方案。
Field field = objectToBeUpdated.getClass().getDeclaredField("paramName");
AccessibleObject.setAccessible(new AccessibleObject[] {field}, true);
下面是上面使用的类的导入。
import java.lang.reflect.AccessibleObject;
import java.lang.reflect.Field;
答案 2 :(得分:0)
如果您的应用程序遵循以下方法,则可以将此问题标记为False positive。
答案 3 :(得分:-2)
如果您使用Spring,则可以使用ReflectionUtils.makeAccessible(field)
来访问该字段。 Fortify没有抱怨这个调整。
您可以在here中了解详情。