最近在解决XSS注入的问题,由于使用的servlet版本是2.5,不支持httpOnly的属性,故做了个工具类来实现cookie的httpOnly的功能。全类如下:

/**

* cookie工具类,解决servlet3.0以前不能添加httpOnly属性的问题
 *

 * @author zhang-long

 * @createTime 2013-6-20

 */

public class CookieUtil {


/**





* @param response HttpServletResponse类型的响应


* @param cookie 要设置httpOnly的cookie对象


*/

    public static void addHttpOnlyCookie(HttpServletResponse response, Cookie cookie){

   
// 判断对象是否存在null的情况

   
if(checkObjIsNull(response) || checkObjIsNull(cookie)){

   
return;

   
}

//依次取得cookie中的名称、值、最大生存时间、路径、域和是否为安全协议信息

   
String cookieName = cookie.getName();

   
String cookieValue = cookie.getValue();

   
int maxAge = cookie.getMaxAge();

   
String path = cookie.getPath();

   
String domain = cookie.getDomain();

   
boolean isSecure = cookie.getSecure();

StringBuffer strBufferCookie = new StringBuffer();

        strBufferCookie.append(cookieName + "=" + cookieValue +  ";");

        

        if(maxAge >= 0){

            strBufferCookie.append("Max-Age=" + cookie.getMaxAge() + ";");

        }

        

        if(!checkObjIsNull(domain)){

       
strBufferCookie.append("domain=" + domain + ";");

        }

        

        if(!checkObjIsNull(path)){

       
strBufferCookie.append("path=" + path + ";");

        }

        

        if(isSecure){

       
strBufferCookie.append("secure;HTTPOnly;");

        }else{

       
strBufferCookie.append("HTTPOnly;");

        }

        

        response.addHeader("Set-Cookie",strBufferCookie.toString());

    }

    

    

    private static boolean checkObjIsNull(Object obj){

   
if(obj == null){

   
return true;

   
}

return false;

    }

}

使用举例:

Cookie cookie1=new Cookie("n","cookieValue1"); 
cookie1.setMaxAge(500);
Cookie cookie2=new Cookie("cookieName2","cookieValue2"); 
Cookie cookie3=new Cookie("cookieName3","cookieValue3"); 
cookie3.setSecure(true);
Cookie cookie4=new Cookie("cookieName4","cookieValue4"); 
cookie4.setSecure(true);

CookieUtil.addHttpOnlyCookie(response, cookie1);
CookieUtil.addHttpOnlyCookie(response, cookie2);
CookieUtil.addHttpOnlyCookie(response, cookie3);
CookieUtil.addHttpOnlyCookie(response, cookie4);

例子中红色的部分只有在应用 使用了HTTPS协议的时候才能添加,否则这个cookie将再也无法读出!

添加成功后,查看cookie如下:

cookie工具类,解决servlet3.0以前不能添加httpOnly属性的问题的更多相关文章

  1. Cookie工具类 - CookieUtil.java

    Cookie工具类,提供Cookie的创建.获取.删除方法. 源码如下:(点击下载 -CookieUtil.java ) import javax.servlet.http.Cookie; impor ...

  2. java cookie 工具类

    package com.xxx.xxx.xxx.xxx; import java.net.URLDecoder; import java.net.URLEncoder; import javax.se ...

  3. Cookie工具类

    import javax.servlet.http.Cookie; import javax.servlet.http.HttpServletRequest; import javax.servlet ...

  4. Java Cookie工具类

    1.Cookie跨域 Cookie不能跨顶级域名访问,但是二级域名可以共享Cookie,所以要实现跨域,有一定的局限性. 2.代码 package com.DingYu.Cookie; import ...

  5. 180425、cookie工具类

    package com.thinkgem.jeesite.common.utils; import java.io.UnsupportedEncodingException; import java. ...

  6. Java Cookie工具类,Java CookieUtils 工具类,Java如何增加Cookie

    Java Cookie工具类,Java CookieUtils 工具类,Java如何增加Cookie >>>>>>>>>>>>& ...

  7. Cookie 工具类

    一.导入 jar 包 <dependency> <groupId>javax.servlet</groupId> <artifactId>servlet ...

  8. Cookie工具类(获取cookie,设置cookie)

    import java.io.UnsupportedEncodingException; import java.net.URLDecoder;import java.net.URLEncoder; ...

  9. js cookie 工具类

    /*cookie start*/ var Cookie=new function(){ //添加cookie this.add=function(name,value,hours){ var life ...

随机推荐

  1. ORM查询语言(OQL)简介--高级篇:脱胎换骨

    相关文章内容索引: ORM查询语言(OQL)简介--概念篇 ORM查询语言(OQL)简介--实例篇 ORM查询语言(OQL)简介--高级篇:脱胎换骨 ORM查询语言(OQL)简介--高级篇(续):庐山 ...

  2. 【我的产品观】开发wangEditor一年总结

    1. 引言 标题说是一周年,其实是不是正好是一周年,我也忘记了,光从github的提交记录看也不准确.印象中觉得,如果要论想法,到现在一年多了,如果要论实际写代码,可能差不多正好一年. 从8月底在济南 ...

  3. xwamp 目录结构设计

    xwamp 目录结构设计原文来自:http://www.xwamp.com/make/directory-structure. 目录说明 所有程序都统一放在D盘下的xwamp目录. 目录列表 Apac ...

  4. Delphi 时间耗时统计

    处理事情: 数据处理过程中,速度很慢,无法准确定位分析是DB问题还是客户端处理问题,所以增加计时统计日志: Delphi计时首次使用,查阅资料,予以记录: var BgPoint, EdPoind: ...

  5. Chrome 控制台console的用法

    下面我们来看看console里面具体提供了哪些方法可以供我们平时调试时使用. 目前控制台方法和属性有: ["$$", "$x", "dir" ...

  6. sharepoint 数据库说明

    一.WSS_Content 后端内容数据库存储所有网站内容,包括网站的文档或文档库中的文件,列表数据和Web部件属性,以及用户名和权限. 为特定网站的所有数据的内容数据库. 二.SharePoint_ ...

  7. 《The Linux Command Line》 读书笔记03 ls命令与长格式输出解释 文件权限

    ls命令与长格式输出解释 文件权限 ls命令 ls 命令用于列出目录内容,不带参数时列出当前工作目录的内容,也可以指定目标目录(可以指定多个),列出目标目录下的内容. ls命令的参数 ls -l 长格 ...

  8. mysql 时间函数转换

    1 NOW() //当前时间 2 SYSDATE() //当前时间 3 CURRENT_TIMESTAMP 4 以'YYYY-MM-DD HH:MM:SS'或YYYYMMDDHHMMSS格式返回当前的 ...

  9. git 上的pull request 是什么意思?

    1.git 上有常见的pull request 功能 2.pull request 的含义 解释一:    有一个仓库,叫Repo A.你如果要往里贡献代码,首先要Fork这个Repo,于是在你的Gi ...

  10. Android Studio教程--从Github 下载一个Repository

    从电脑上彻底删除HelloWorld项目 回到as欢迎页面 复制github中项目的地址 点击clone