下面是我的Java代码,用于从Tomcat 7 API创建javax.servlet.http.Cookie

 Cookie c = new Cookie("code", code.trim());
 c.setPath("/public");
 response.addCookie(c);
 response.setStatus(200);

我正在尝试添加c.setHttpOnly(true);以使上述代码符合声纳标准,但是Eclipse抛出了一个编译器错误,指示he method setHttpOnly(boolean) is undefined for the type Cookie,但是从Tomcat 7 API的https://tomcat.apache.org/tomcat-7.0-doc/servletapi/index.html的Javadoc中,我确实发现setHttpOnly()类中存在Cookie,请有人帮帮我了解我为什么获取添加c.setHttpOnly(true);的编译器错误?

最佳答案

Servlet 3.0规范中添加了setHttpOnly类的javax.servlet.http.Cookie方法。

Tomcat 7实现了Servlet 3.0规范,但是为了编译代码,您需要添加适当的Maven依赖项。

确保您对Servlet 3.0 API的依赖范围为provided:

<dependency>
    <groupId>javax.servlet</groupId>
    <artifactId>javax.servlet-api</artifactId>
    <version>3.0.1</version>
    <scope>provided</scope>
</dependency>

使用此依赖关系代码,cookie.setHttpOnly(true);将进行编译。

手动将HttpOnly标志附加到Cookie值response.addHeader("Set-Cookie","name=value; HttpOnly");最有可能不会通过SonarQube检查。

规则https://rules.sonarsource.com/java/RSPEC-3330检查setHttpOnly(true)方法调用的存在。

但是可以通过在导致警告的行末添加//NOSONAR注释来抑制SonarQube检查:
Cookie c = new Cookie("code", code.trim()); //NOSONAR

09-03 20:18