【问题标题】:Resource annotation in servlets triggers squid:S2226servlet 中的资源注释触发 squid:S2226
【发布时间】:2018-08-31 19:58:30
【问题描述】:

当我尝试在 servlet 中使用 Resource 注释时,Sonar 触发规则 squid:S2226“Servlet 不应具有可变实例字段”并告诉我将变量设为 final 或 static。

但是资源注入不起作用以及final和static变量。

这是声纳中的错误还是 servlet 不再推荐资源注入?

public class MyServlet extends HttpServlet {
    @Resource(name = "jdbc/database")
    private DataSource dataSource;
}

ServletConfig 也出现了类似的难题

private ServletConfig config;

@Override
public void init(ServletConfig config) throws ServletException {
    this.config = config;
}

这里,config 不能成为最终的,但将其设为静态会触发另一个规则 squid:S2696 : "Instance methods should not write to "static" fields"

如果有用的话,我使用 SonarLint for Eclipse 3.3.1.201712071600 遇到了这种情况。

【问题讨论】:

    标签: java sonarqube sonarlint sonarlint-eclipse


    【解决方案1】:

    注入成员

    关于注入的成员(@EJB、@Resource、...),您是对的,并且在 SONARJAVA 问题跟踪器中有(现已修复)Issues

    例如SONARJAVA-2744
    标题:“S2226 不应引发带有 @Resource 注释的字段的问题”
    解决了 5.4 版的安全规则

    在#init 中初始化的成员

    还有另一个(已解决)问题:SONARJAVA-1458
    在#init 中初始化的成员不应触发 squid:S2226。

    根据ServletConfig
    通常不需要保存对 ServletConfig 的引用,因为可以使用 GenericServlet#getServletConfig 访问它。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-08-28
      • 2012-07-02
      • 2011-07-12
      • 2013-01-30
      • 1970-01-01
      相关资源
      最近更新 更多