1. 程式人生 > >JavaWeb-Cookie實現記住使用者的功能

JavaWeb-Cookie實現記住使用者的功能

先看一下效果:



登入之後,我們再退出登入




我們發現cookie裡面多了使用者名稱和密碼。

但我們發現這樣安全存在很大的隱患,我們對密碼進行加密。

1、base64加密

     在頁面中引入base64.js檔案

2、md5加密(不可逆)

3、sha1加密(據說這是最安全的加密

我們這裡用base64來進行加密解密:

<script src="${base}/static/hplus/js/jquery.base64.js" type="text/javascript"></script>
var a="123456";
var b=$.base64.btoa(a);加密
console.log($.base64.atob(b)); 解密

後端加密,前端解密

package com.demo.core.utils;

import sun.misc.CharacterEncoder;

import java.io.OutputStream;
import java.io.IOException;

/**
 * @see CharacterEncoder
 * @see BASE64Decoder
 */
public class BASE64Encoder extends CharacterEncoder {

	/** this class encodes three bytes per atom. */
	protected int bytesPerAtom() {
		return (3);
	}

	/**
	 * this class encodes 57 bytes per line. This results in a maximum of 57/3 *
	 * 4 or 76 characters per output line. Not counting the line termination.
	 */
	protected int bytesPerLine() {
		return (57);
	}

	/** This array maps the characters to their 6 bit values */
	private final static char pem_array[] = {
			// 0 1 2 3 4 5 6 7
			'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', // 0
			'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', // 1
			'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', // 2
			'Y', 'Z', 'a', 'b', 'c', 'd', 'e', 'f', // 3
			'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', // 4
			'o', 'p', 'q', 'r', 's', 't', 'u', 'v', // 5
			'w', 'x', 'y', 'z', '0', '1', '2', '3', // 6
			'4', '5', '6', '7', '8', '9', '+', '/' // 7
	};
	protected void encodeAtom(OutputStream outStream, byte data[], int offset, int len) throws IOException {
		byte a, b, c;
		if (len == 1) {
			a = data[offset];
			b = 0;
			c = 0;
			outStream.write(pem_array[(a >>> 2) & 0x3F]);
			outStream.write(pem_array[((a << 4) & 0x30) + ((b >>> 4) & 0xf)]);
			outStream.write('=');
			outStream.write('=');
		} else if (len == 2) {
			a = data[offset];
			b = data[offset + 1];
			c = 0;
			outStream.write(pem_array[(a >>> 2) & 0x3F]);
			outStream.write(pem_array[((a << 4) & 0x30) + ((b >>> 4) & 0xf)]);
			outStream.write(pem_array[((b << 2) & 0x3c) + ((c >>> 6) & 0x3)]);
			outStream.write('=');
		} else {
			a = data[offset];
			b = data[offset + 1];
			c = data[offset + 2];
			outStream.write(pem_array[(a >>> 2) & 0x3F]);
			outStream.write(pem_array[((a << 4) & 0x30) + ((b >>> 4) & 0xf)]);
			outStream.write(pem_array[((b << 2) & 0x3c) + ((c >>> 6) & 0x3)]);
			outStream.write(pem_array[c & 0x3F]);
		}
	}
}
BASE64Encoder base64Encoder = new BASE64Encoder();
Cookie nameCookie = new Cookie("name",username);
Cookie pwdCookie = new Cookie("pwd",base64Encoder.encode(password.getBytes()));
            

實現講解:

1.頁面jquery.cookie.js外掛

<!-- 實現記住我功能外掛js-->
<script src="${base}/static/hplus/js/jquery.cookie.js" type="text/javascript"></script>
$("#username").val($.cookie("name"));
$("#password").val($.cookie("pwd"));

2.後端根據是否選擇記住使用者資訊做相應判斷

if (isRemberme)){
    //記住使用者
    Cookie nameCookie = new Cookie("name",username);
    Cookie pwdCookie = new Cookie("pwd",password);
    //3天
    nameCookie.setMaxAge(3*24*60*60);
    pwdCookie.setMaxAge(3*24*60*60);
    response.addCookie(nameCookie);
    response.addCookie(pwdCookie);
}else{//清除cookie
    Cookie[] cookies = request.getCookies();
    for(Cookie cookie:cookies ){
    if (cookie.getName().equals("name")||cookie.getName().equals("pwd")) {
       cookie.setValue(null);
       cookie.setMaxAge(0);// 立即銷燬cookie
       System.out.println("被刪除的cookie名字為:" + cookie.getName());
       response.addCookie(cookie);
    }
    }
}

就這麼簡單。。。

一、什麼是Cookie

cookie是一種WEB伺服器通過瀏覽器在訪問者的硬碟上儲存資訊的手段。Cookie的目的就是為使用者帶來方便,為網站帶來增值。雖然有著許多誤傳,事實上Cookie並不會造成嚴重的安全威脅。Cookie永遠不會以任何方式執行,因此也不會帶來病毒或攻擊你的系統。另外,由於瀏覽器一般只允許存放300個Cookie,每個站點最多存放20個Cookie,每個Cookie的大小限制為4KB,因此Cookie不會塞滿你的硬碟。

例如,當我們第一次訪問網站輸入使用者名稱密碼時,可以選擇讓系統記住使用者名稱密碼,下次就不用重新輸入了,這就是典型的Cookie的應用。

二、Cookie帶來的好處:

cookies給網站和使用者帶來的好處非常多:

  • 1. Cookie能使站點跟蹤特定訪問者的訪問次數、最後訪問時間等
  • 2. Cookie能告訴線上廣告商廣告被點選的次數,從而可以更精確的投放廣告
  • 3. Cookie有效期限未到時,Cookie能使使用者在不鍵入密碼和使用者名稱的情況下進入曾經瀏覽過的一些站點
  • 4. Cookie能幫助站點統計使用者個人資料以實現各種各樣的個性化服務在JSP中,我們也可以使用Cookie,來編寫一些功能強大的應用程式。

有些瀏覽器可以禁用Cookie,所以不能使用Cookie來完成核心的業務。

三、Cookie類的主要方法:

int getMaxAge() 返回Cookie過期之前的最大時間,以秒計算。
int setMaxAge() 設定Cookie過期時間,以秒計算。 

String getName() 返回Cookie的名字 

String getValue() 返回Cookie的值。
void setValue(String newValue) cookie建立後設置一個新的值。