首页 > 解决方案 > BeanUtils Java 的替代品(错误 SonarQube)

问题描述

我目前正在寻找一种将属性动态设置为对象的方法,我有这个:

public static void assign(Object instance, String attribute, Object value) {
    try {
        if (value != null) {
            BeanUtils.setProperty(instance, attribute, value);
        }
    } catch (IllegalAccessException | InvocationTargetException ex) {
        throw new TechnicalException(ex.getMessage(), ex);
    }
}

但是Sonarqube给我一个错误:

“确保在这里设置 JavaBean 属性是安全的。”

所以我需要一种替代方法来动态填充我的对象,或者一种方法来避免“BeanUtils.setProperty”中的异常(避免异常,因为由于项目的性质,没有漏洞风险)。

或者以某种方式接收一个对象,并通过动态转换值的数据类型来为一个字段分配一个特定的值。

任何想法?

预先非常感谢您。

标签: javareflectionjava-8sonarqubeapache-commons-beanutils

解决方案


sonarqube 的消息更多的是警告您的代码存在潜在的安全问题。当您让用户传递参数时就是这种情况,该参数直接注入此属性中。当这是您的用例时,您需要验证/清理用户输入以避免潜在风险。

当您确认这不是风险时,这似乎是您的情况

因为由于项目的性质,不存在漏洞风险

代码内

您可以使用 SuppressWarnings 注释您的方法,以及要忽略的警告的引用

@java.lang.SuppressWarnings("java:S4512")

声纳内

由于这是一个安全热点,您还可以在 sonarqube 中将其标记为已检查且安全。您可以在项目的失败安全热点中执行此操作,并将其标记为“安全”

声纳 qube 审查状态


推荐阅读