servlet中的资源注释触发squid:S2226

问题描述 投票:3回答:1

当我尝试在servlet中使用Resource注释时,Sonar触发规则squid:S2226“Servlet不应该有可变的实例字段”并告诉我使变量为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不能成为final,但是使其成为静态触发另一个规则squid:S2696:“实例方法不应该写入”static“字段”

如果有用,我会使用SonarLint for Eclipse 3.3.1.201712071600来满足这种情况。

java sonarqube sonarlint sonarlint-eclipse
1个回答
1
投票

注入会员

您注意成员(@EJB,@ Resource,...)是正确的,并且在SONARJAVA问题跟踪器中有(现已修复)Issues

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

成员在#init中初始化

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

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

© www.soinside.com 2019 - 2024. All rights reserved.