当前位置: 首页 > news >正文

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

最近在解决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如下:



 

转载于:https://www.cnblogs.com/dyllove98/p/3146720.html

相关文章:

  • 语音频谱语音信号处理之(四)梅尔频率倒谱系数(MFCC)
  • apache+php+mysql的分布安装
  • Lvs+keepalived+nginx+php的session 保持的算法
  • [免費軟體] 用15個「免費正版軟體」取代盜版軟體! (狂省10萬元!)
  • 【算法】算法的艺术(二)
  • 泛型回顾
  • 离线缓存
  • 字符串的提取
  • MySql数据库恢复(*frm)文件
  • Flex Fonts
  • Java菜鸟学习笔记(4)--常见编译运行错误汇集(不断更新)
  • XHTML--1
  • 如何快速去掉.svn文件夹?
  • js英雄对战小游戏 看看你的人品
  • mongodb在PHP下的应用学习笔记
  • [rust! #004] [译] Rust 的内置 Traits, 使用场景, 方式, 和原因
  • bearychat的java client
  • es6--symbol
  • HTML5新特性总结
  • HTTP 简介
  • JS字符串转数字方法总结
  • NSTimer学习笔记
  • passportjs 源码分析
  • PHP的类修饰符与访问修饰符
  • Python学习笔记 字符串拼接
  • Spark RDD学习: aggregate函数
  • 反思总结然后整装待发
  • 机器学习中为什么要做归一化normalization
  • 解决jsp引用其他项目时出现的 cannot be resolved to a type错误
  • 跨域
  • 如何抓住下一波零售风口?看RPA玩转零售自动化
  • 通信类
  •  一套莫尔斯电报听写、翻译系统
  • 最简单的无缝轮播
  • postgresql行列转换函数
  • ​linux启动进程的方式
  • ​马来语翻译中文去哪比较好?
  • # include “ “ 和 # include < >两者的区别
  • # 执行时间 统计mysql_一文说尽 MySQL 优化原理
  • #mysql 8.0 踩坑日记
  • #我与Java虚拟机的故事#连载15:完整阅读的第一本技术书籍
  • #中的引用型是什么意识_Java中四种引用有什么区别以及应用场景
  • (C语言)输入自定义个数的整数,打印出最大值和最小值
  • (Pytorch框架)神经网络输出维度调试,做出我们自己的网络来!!(详细教程~)
  • (附源码)ssm智慧社区管理系统 毕业设计 101635
  • (机器学习的矩阵)(向量、矩阵与多元线性回归)
  • (四)Controller接口控制器详解(三)
  • (原創) 未来三学期想要修的课 (日記)
  • (中等) HDU 4370 0 or 1,建模+Dijkstra。
  • (转)visual stdio 书签功能介绍
  • (转)菜鸟学数据库(三)——存储过程
  • (转)详解PHP处理密码的几种方式
  • .NET Core MongoDB数据仓储和工作单元模式封装
  • .NET 中各种混淆(Obfuscation)的含义、原理、实际效果和不同级别的差异(使用 SmartAssembly)
  • .NET6实现破解Modbus poll点表配置文件