技術分享:Cookie 防偽造 防修改
主要防止非法用戶修改cookie信息,以及cookie的超時時間
傳統cookie存儲,Cookie(name, value),value很容易就被篡改。
防修改cookie存儲,Cookie(name, value 「」 signToken 「」 saveTime 「」 maxTime)
signToken :簽名密鑰 由md5(value saveTime maxTime 」自定義密鑰「)生成
saveTime:cookie創建時間
maxTime:cookie超時時間
設置Cookie
public static void put(HttpServletResponse response, String key, String value, int maxTime) {
String pwdKey = white_yu; //自定義密鑰
String saveTime = System.currentTimeMillis() ;
String signToken = md5(pwdKey, saveTime, maxTime , value);
String cookieValue = signToken saveTime maxTime
value;
Cookie cookie = new Cookie(key,cookieValue);
cookie.setMaxAge(maxTime);
response.addCookie(cookie);
}
獲取Cookie
public static String getCookie(String cookieValue) {
String pwdKey = white_yu; //自定義密鑰
if (StringUtils.isNotBlank(cookieValue)) {
String cookieStrings[] = cookieValue.split();
if (null != cookieStrings 4 == cookieStrings.length) {
String signToken = cookieStrings[0];
String saveTime = cookieStrings[1];
String maxTime = cookieStrings[2];
String value = cookieStrings[3];
String sign = md5(pwdKey, saveTime, maxTime, value);
// 保證 cookie 不被人為修改
if (sign.equals(signToken)) {
long stime = Long.parseLong(saveTime);
long maxtime = Long.parseLong(maxTime) * 1000;
// 查看是否過時
if ((stime maxtime) - System.currentTimeMillis() 0) {
return value;
}
}
}
}
return null;
}
※Kotlin技術分享-異常
※MariaDB10.3 系統版本表 有效防止數據丟失
TAG:千鋒JAVA開發學院 |