HttpOnly Cookies是一个cookie安全行的解决方案。

在支持HttpOnly cookies的浏览器中(IE6+,FF3.0+),如果在Cookie中设置了"HttpOnly"属性,那么通过JavaScript脚本将无法读取到Cookie信息,这样能有效的防止XSS攻击,让网站应用更加安全。

但是J2EE4,J2EE5 的Cookie并没有提供设置 HttpOnly 属性的方法,所以如果需要设置HttpOnly属性需要自己来处理。

import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServletResponse; /**
* Cookie工具类
*/
public class CookieUtil { /**
* 设置HttpOnly Cookie
* @param response HTTP响应
* @param cookie Cookie对象
* @param isHTTPOnly 是否为HttpOnly
*/
public static void addCookie(HttpServletResponse response, Cookie cookie, boolean isHttpOnly) {
String name = cookie.getName();//Cookie名称
String value = cookie.getValue();//Cookie值
int maxAge = cookie.getMaxAge();//最大生存时间(毫秒,0代表删除,-1代表与浏览器会话一致)
String path = cookie.getPath();//路径
String domain = cookie.getDomain();//域
boolean isSecure = cookie.getSecure();//是否为安全协议信息 StringBuilder buffer = new StringBuilder(); buffer.append(name).append("=").append(value).append(";"); if (maxAge == 0) {
buffer.append("Expires=Thu Jan 01 08:00:00 CST 1970;");
} else if (maxAge > 0) {
buffer.append("Max-Age=").append(maxAge).append(";");
} if (domain != null) {
buffer.append("domain=").append(domain).append(";");
} if (path != null) {
buffer.append("path=").append(path).append(";");
} if (isSecure) {
buffer.append("secure;");
} if (isHttpOnly) {
buffer.append("HTTPOnly;");
} response.addHeader("Set-Cookie", buffer.toString());
} }

值得一提的是,Java EE 6.0 中 Cookie已经可以设置HttpOnly了,所以如果是兼容 Java EE 6.0 的容器(例如如 Tomcat 7),可以直接使用Cookie.setHttpOnly 的方法来设置HttpOnly:

cookie.setHttpOnly(true);

JAVA设置HttpOnly Cookies的更多相关文章

  1. 浏览器因cookie设置HttpOnly标志引起的安全问题

    1.简介 如果cookie设置了HttpOnly标志,可以在发生XSS时避免JavaScript读取cookie,这也是HttpOnly被引入的 原因.但这种方式能防住攻击者吗?HttpOnly标志可 ...

  2. JAVA设置环境变量和在DOS下运行java程序

    在学校实训的这几天,老师带着我们开始深入的复习java.这是第一天的内容哦 对于“JAVA设置环境变量和在DOS下运行java程序”,许多初学者是陌生的,但了解这个却对后期的学习很重要. http:/ ...

  3. Java设置环境变量

    客上转过来的. 非常多人写了非常久java代码.还不知道环境变量是怎么一回事.科普一下. 一.java设置环境变量 - 精简版   1.右键打开我的电脑->属性->高级->环境变量 ...

  4. windows 中 到底是用的哪个java.exe??? 删除了PATH变量的Java设置还是可以运行java.exe windows/system32

    到底是用的哪个java.exe??? 删除了PATH变量的Java设置还是可以运行java.exe JavaWindowsCC++C#  当电脑里面有多个jdk或是jre时,在cmd里面到底是用的哪个 ...

  5. 转!!Java设置session超时(失效)的时间

    Java设置session超时(失效)的时间   在一般系统登录后,都会设置一个当前session失效的时间,以确保在用户长时间不与服务器交互,自动退出登录,销毁session具体设置的方法有三种:1 ...

  6. java设置随机数教程

    java作为程序猿开发人员都在使用的一款编程语言,许多入门的朋友都陷入了一个简单的问题就是,使用java开发时随机数要怎么设置?java怎么设置随机数?经常会有地方需要用到随机数,不用着急,一起来看看 ...

  7. Java设置Client Socket链接Server超时时间

    Java设置Client Socket链接Server超时时间 学习了:http://blog.csdn.net/tterminator/article/details/52494141 http:/ ...

  8. java设置北京时间的时区

    java设置北京时间的时区   解决方法: 设置北京时间的时区,消除时间差. TimeZone timeZone = TimeZone.getTimeZone("GMT+8"); ...

  9. Cookie设置HttpOnly,Secure,Expire属性

    在eclipese中创建Web工程时,有个dynamic web module version选项,首先解释下这个选项的意思: http://stackoverflow.com/questions/3 ...

随机推荐

  1. Android应用程序访问linux驱动第一步:实现并测试Linux驱动

    一直都想亲自做一次使用android应用程序访问Linux内核驱动的尝试,但总是没能做到.最近抽出时间,下决心重新尝试一次.尝试的开始当然是先写一个Linux内核驱动了. 我希望写一个简单测驱动程序, ...

  2. rails执行sidekiq任务的时候报错“can't connect to local mysql server through socket '/var/run/mysqld/mysqld.sock'”

    rails执行sidekiq任务的时候报错“can't connect to local mysql server through socket '/var/run/mysqld/mysqld.soc ...

  3. cocos2d-x 3.1.1 学习笔记[15] Shader 著色器

    首先须要两个文件 gray.fsh varying vec4 v_fragmentColor; varying vec2 v_texCoord; void main() { vec4 v_orColo ...

  4. webDriver API——第9部分Firefox WebDriver

    class selenium.webdriver.firefox.webdriver.WebDriver(firefox_profile=None, firefox_binary=None, time ...

  5. [Mybatis - 1A] - Cause: java.sql.SQLException: Column count doesn't match value count at row 1

    严重: Servlet.service() for servlet [springMVC] in context with path [/ExceptionManageSystem] threw ex ...

  6. C语言中函数和指针的參数传递

    近期写二叉树的数据结构实验.想用一个没有返回值的函数来创建一个树,发现这个树就是建立不起来,那么我就用这个样例讨论一下c语言中指针作为形參的函数中传递中隐藏的东西. 大家知道C++中有引用的概念,两个 ...

  7. C# Conditional特性避免 预处理命令泛滥使用

    //#define CONDITION1 #define CONDITION2 using System; using System.Diagnostics; class Test { static ...

  8. Backbone.js 1.0.0源码架构分析(一)

    Backbone.js 是javascript 语言中 首个实现MVC设计模式的类库,API接口方法重度依赖于underscore.js,DOM选择器则依赖于jQuery.js或者zepto.js. ...

  9. Memcached 测试

    Memcached set 命令用于将 value(数据值) 存储在指定的 key(键) 中. 如果set的key已经存在,该命令可以更新该key所对应的原来的数据,也就是实现更新的作用. 语法: s ...

  10. ExtJS学习------Ext.define的继承extend,用javascript实现相似Ext的继承

    (1)Ext.define的继承extend 详细实例: Ext.onReady(function(){ //Sup Class 父类 Ext.define('Person',{ config:{ n ...