手机看片精品高清国产日韩,色先锋资源综合网,国产哺乳奶水91在线播放,乱伦小说亚洲色图欧洲电影

jsp網(wǎng)站到phpwind論壇的同步登陸登出實(shí)現(xiàn)

2016-07-20 08:17:09 14191

討論下基于java+jsp開發(fā)的網(wǎng)站同phpwind論壇的同步登陸問題,主要就是要做到cookie的一致。

phpwind的cookie的生成方式較為復(fù)雜,而且查閱了網(wǎng)上很多資料,參照了phpwind包login.php里的過程,只是php語言的,對我這樣不熟悉php的人來說還是有點(diǎn)麻煩的。于是我用java代碼實(shí)現(xiàn)生成了phpwind可以識別的cookie,做到了同步登陸。

具體步驟如下:

生成的cookie的name和value都要與phpwind的一致,首先看cookie的name生成規(guī)則,先查找phpwind數(shù)據(jù)庫表pw_config的name為db_sitehash字段的值(這里用PwConfig.db_sitehash表示),經(jīng)過MD5方式加密后,取前5位與字符串"_winduser"拼接而成。

java代碼如下:

  1. private String generateCookieName() { 

  2.        StringBuilder cookieNameString = new StringBuilder(md5.hash( 

  3.        PwConfig.db_sitehash).substring(0, 5)).append("_winduser"); 

  4.        return cookieNameString .toString(); 

  5.  } 

再看cookie的value生成規(guī)則,有點(diǎn)復(fù)雜,需要細(xì)心和一點(diǎn)耐心,需要獲取

  1. private String generateCookieValue(User user, HttpServletRequest request, 

  2.    HttpServletResponse response) { 

  3. //獲取系統(tǒng)瀏覽器信息,后面用到 

  4.   String user_Agent = request.getHeader("user-agent"); 

  5.   Integer pwMember_Uid = null

  6.  //獲取jsp網(wǎng)站登錄用戶在論壇用戶表中的uid,當(dāng)然要同步登錄,jsp網(wǎng)站和論壇的數(shù)據(jù)庫用戶數(shù)據(jù)表?據(jù)肯定要一致啦 

  7.    pwMember_Uid = pwMembersDao.getuIdByUsername(user.getName()); 

  8.  

  9. //為了效率,字符串拼接操作都采用StringBuilder類型  

  10.   StringBuilder cookieBaseStringBuilder = new StringBuilder();  

  11.   if (pwMember_Uid != null) {  

  12. //這里的md5.hash()函數(shù)作用是對字符串進(jìn)行MD5方式加密,返回32位結(jié)果字符串;user是jsp網(wǎng)站登錄的用戶對象,里面的密碼就是明文,PwConfig.db_hash是論壇pw_config表中db_hash的值  

  13. cookieBaseStringBuilder  

  14.      .append(pwMember_Uid.toString())  

  15.      .append(" ")  

  16.      .append(md5.hash(new StringBuilder(user_Agent)         

  17.        .append(md5.hash(user.getPassword()))  

  18.        .append(PwConfig.db_hash).toString()))  

  19.      .append(" ").append("");  

  20.   } else {  

  21.    return "";  

  22.   }  

  23.   String cookieBaseKey = md5.hash(  

  24.     new StringBuilder(user_Agent).append(PwConfig.db_hash)  

  25.       .toString()).substring(8, 26);  

  26.   String cookieBaseString = cookieBaseStringBuilder.toString();  

  27.   int keylen = cookieBaseKey.length();  

  28.   int strlen = cookieBaseString.length();  

  29.   StringBuilder cookieValueStringBuilder = new StringBuilder();  

  30.   for (int i = 0; i < strlen; i++) {  

  31.    int k = i % keylen;  

  32. //對前面生成的cookieBaseString和cookieBaseKey字符串中指定位字符進(jìn)行按位異或  

  33.    cookieValueStringBuilder  

  34.      .append((char) (cookieBaseString  

  35.        .toCharArray()[i] ^ cookieBaseKey.toCharArray()[k]));  

  36.   }  

  37.   String cookieValue = cookieValueStringBuilder.toString();  

  38.   try {  

  39. //在進(jìn)行一次Base64編碼  

  40. cookieValue = new String(Base64.encodeToByte(cookieValue  

  41.      .getBytes("UTF-8")));  

  42.   } catch (UnsupportedEncodingException e) {  

  43.    e.printStackTrace();  

  44.   }  

  45. //去掉base64編碼后末尾可能出現(xiàn)的等號,好像不去也行,好像phpwind識別時(shí)也會(huì)自動(dòng)去掉  

  46.   cookieValue = cookieValue.replace("=""");  

  47.   return cookieValue;  

  48.  }  

至此,cookie的name和value都已經(jīng)生成,只需要放到cookie中就行了.

  1. public void addCookie(User user, HttpServletRequest request, 

  2.    HttpServletResponse response) { 

  3.   String name = generateCookieName(); 

  4.   String value = generateCookieValue(user, request, response); 

  5.   Cookie cookie = new Cookie(name , value); 

  6.   cookie.setMaxAge(60 * 30); 

  7.   cookie.setPath("/"); 

  8.   response.addCookie(cookie); 

  9.  } 

同步登出也很容易,只要將指定name值的cookie的value設(shè)置為空就行了

  1. public void clearCookie(HttpServletResponse response) { 

  2.   Cookie cookie = new Cookie(getCookieName(), null); 

  3.   cookie.setMaxAge(0); 

  4.   cookie.setPath("/"); 

  5.   response.addCookie(cookie); 

  6.  } 


提交成功!非常感謝您的反饋,我們會(huì)繼續(xù)努力做到更好!

這條文檔是否有幫助解決問題?

非常抱歉未能幫助到您。為了給您提供更好的服務(wù),我們很需要您進(jìn)一步的反饋信息:

在文檔使用中是否遇到以下問題: