您好我正在尝试将Httponly和安全标志添加到我的Cookie中。这就是我试过的
public static void addCookie(HttpServletRequest request,HttpServletResponse response)
{
Cookie[] cookie = request.getCookies();
for(int i=0;i<cookie.length;i++)
{
System.out.println(cookie[i].toString());
System.out.println("cookie Name :"+cookie[i].getName());
System.out.println("cookie value :"+cookie[i].getValue());
cookie[i].setSecure(true);
System.out.println("Secure :"+cookie[i].getSecure());
}
在上面的代码中,我刚刚将secure设置为true。现在当使用萤火虫看天气饼干被设置为安全或不安全我只是看到
为什么我的cookie不安全?
现在另一个标志Httponly,我如何将我的cookie设置为httponly标志。
当我使用eclipse编写代码时,eclipse给出了一个方法
的建议cookie[i].setHttpOnly(true);
但是当我运行代码时,我得到错误说。
java.lang.NoSuchMethodError:javax.servlet.http.Cookie.setHttpOnly(Z)V
我看到了javax.servlet.http.Cookie类规范,我没有看到任何调用的方法 http://docs.oracle.com/javaee/1.4/api/javax/servlet/http/Cookie.html
cookie[i].setHttpOnly(true);
如何保护我的Cookie?
我尝试了多种解决方案但是工作。 我试过这个
String sessionid = req.getSession().getId();
res.setHeader("Set-Cookie", "JSESSIONID=" + sessionid + ";HttpOnly");
res.setHeader("SET-COOKIE", "JSESSIONID=" + sessionid + "; secure");
更新1 我也尝试了这个
<session-config>
<cookie-config>
<secure>true</secure>
<http-only>true</http-only>
</cookie-config>
</session-config>
但它适用于servlet 3.0,它不适用于2.5 @Jarrod Roberson可以请你重新打开我的问题。
当我在web.xml中编写上述解决方案时 我收到了轰鸣声错误
cvc-complex-type.2.4.a: Invalid content was found starting with element 'cookie-config'. One of '{"http://
java.sun.com/xml/ns/javaee":session-timeout}' is expected.
更新2 因为我已经搜索了很多,我看到了同样的解决方案。 它在Servlet 3.0中引入,在旧版本(如2.5)中不受支持。您的web.xml声明符合Servlet 2.5。 请参阅BalusC的答案 web.xml validation in Weblogic throws error because of cookie-config
更新3
这正是我在波纹管链接中所做的所做的 Suggested link
在web.xml
<filter>
<filter-name>Security Filter</filter-name>
<filter-class>com.globalss.dnb.monitor.security.SecurityFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>Security Filter</filter-name>
<url-pattern>*.jsp</url-pattern>
</filter-mapping>
SecurityFilter类
public class SecurityFilter implements Filter {
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
// wrap the response
response = new SecureCookieSetter((HttpServletResponse)response);
// touch the session
((HttpServletRequest) request).getSession();
// overwriting the cookie with Secure attribute set
((HttpServletResponse)response).setHeader("Set-Cookie", "JSESSIONID=" + ((HttpServletRequest)request).getSession().getId() + ";Path=/");
}
public void destroy() {
// TODO Auto-generated method stub
}
public void init(FilterConfig arg0) throws ServletException {
// TODO Auto-generated method stub
}
}
SecureCookieSetter类
public class SecureCookieSetter extends HttpServletResponseWrapper {
public SecureCookieSetter(HttpServletResponse response) {
super(response);
}
@Override
public void addCookie(Cookie cookie) {
cookie.setSecure(true);
super.addCookie(cookie);
}
@Override
public void addHeader(String name, String value) {
if ((name.equals("Set-Cookie")) && (!value.matches("(^|.*;)\\s*Secure"))) {
value = value + ";Secure";
}
super.addHeader(name, value);
}
@Override
public void setHeader(String name, String value) {
if ((name.equals("Set-Cookie")) && (!value.matches("(^|.*;)\\s*Secure"))) {
value = value + ";Secure";
}
super.setHeader(name, value);
}
}
执行此操作后,当我运行我的服务器时,现在我无法访问我的应用程序的任何页面,但我没有收到任何错误。
更新4
正如所建议的那样,我添加了BaluC建议的这条线。我能够运行该应用程序,但我没有看到HttpOnly
标志。
请帮忙