cookie工具類,解決servlet3.0以前不能添加httpOnly屬性的問題

來源:互聯網
上載者:User

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

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.