下面是我的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