导读: 一直有人问我jsp与dz的整合方法,不过我对jsp一点都不熟,基本上就是不会 后网上搜了一篇文章,也没注明是哪位仁兄所写的,我没有验证过,现贴出供大家参考。 jsp 应用系统整合discuz论坛用户系统 关键代码 /** * MD5算法 * @param strToEncrypt * @return */ public static String Md5(String strToEncrypt) { char hexDigits[] = { ‘0’, ‘1’, ‘2’, ‘3’, ‘4’, ‘5’, ‘6’, ‘7’, ‘8’, ‘9’, ’a’, ‘b’, ‘c’, ‘d’, ‘e’, ‘f’ }; try { byte[] strTemp = strToEncrypt.getBytes(); MessageDigest mdTemp = MessageDigest.getInstance(“MD5”); mdTemp.update(strTemp); byte[] md = mdTemp.digest(); int j = md.length; char str[] = new char[j * 2]; int k = 0; for (int i = 0; i { byte byte0 = md[i]; str[k++] = hexDigits[byte0 >>>4 &0xf]; str[k++] = hexDigits[byte0 &0xf]; } return new String(str); } catch (Exception e) { return “”; } } 整合函数 package com.tecamo.cms.util; import java.io.UnsupportedEncodingException; import java.util.Map; import java.util.Random; import java.util.Set; import com.tecamo.util.encrypt.EncryptString; import sun.misc.BASE64Decoder; public class DiscuzPassportUtils { public static String passportEncrypt(String src, String key) { Random random = new Random(); random.setSeed(System.currentTimeMillis()); String rand = “” + random.nextInt() % 32000; String encryptKey = EncryptString.encryptMD5(rand); int ctr = 0; String tmp = “”; for (int i = 0; i ctr = (ctr == encryptKey.length() ? 0 : ctr); tmp += encryptKey.charAt(ctr); char c = (char) (src.charAt(i) ^ encryptKey.charAt(ctr)); tmp += c; ctr++; } String passportKey = passportKey(tmp, key); return new sun.misc.BASE64Encoder().encode(passportKey.getBytes()); } public static String passortDecrypt(String src, String key) { byte[] bytes = null; try { bytes = new BASE64Decoder().decodeBuffer(src); src = new String(bytes); } catch (Exception e) { return null; } src = passportKey(src, key); String tmp = “”; for (int i = 0; i char c = (char)(src.charAt(i) ^ src.charAt(++i)); tmp += c; } return tmp; } public static String passportKey(String src, String key) { String encryptKey = EncryptString.encryptMD5(key); int ctr = 0; String tmp = “”; for (int i = 0; i ctr = (ctr == encryptKey.length() ? 0 : ctr); char c = (char) (src.charAt(i) ^ encryptKey.charAt(ctr)); tmp += c; ctr++; } return tmp; } public static String passportEncode(Map> Set keys = data.keySet(); String ret = “”; for (String key : keys) { try { ret += java.net.URLEncoder.encode(key, “UTF-8”) + “=” + java.net.URLEncoder.encode(data.get(key), “UTF-8”) + “&”; } catch (UnsupportedEncodingException e) { return “”; } } if (ret.length() >0) return ret.substring(0, ret.length() – 1); return “”; } } 调用方法: login.jsp <%String strUser=(String) session.getAttribute("username");if(strUser!=null &&!strUser.equals("")){ out.println("当前用户:" + strUser);}String forward=MyRequest.getString(request,"forward","");String action=MyRequest.getString(request,"action","");if(action.equals("login")){ String forumURL="http://devserver:8066"; String userName=MyRequest.getString(request,"account",""); String email=userName; String pwd=MyRequest.getString(request,"pwd",""); Map< String strUser=(String) session.getAttribute("username"); if(strUser!=null &&!strUser.equals("")) { out.println("当前用户:" + strUser); } String forward=MyRequest.getString(request,"forward",""); String action=MyRequest.getString(request,"action",""); if(action.equals("login")) { String forumURL="http://devserver:8066"; String userName=MyRequest.getString(request,"account",""); String email=userName; String pwd=MyRequest.getString(request,"pwd",""); Map mb = new LinkedHashMap(); mb.put(“time”, “”+System.currentTimeMillis()); mb.put(“username”, userName); mb.put(“email”, email); mb.put(“password”, pwd); String key = “12345678901”; String enc=DiscuzPassportUtils.passportEncode(mb); String auth = DiscuzPassportUtils.passportEncrypt(enc, key); String verify = “login” + auth + forward + key; verify = EncryptString.encryptMD5(verify); String location = forumURL+”/api/passport.php?action=login&auth=”+URLEncoder.encode(auth, “UTF-8”)+”&forward=”+URLEncoder.encode(forward, “UTF-8”)+”&verify=”+URLEncoder.encode(verify, “UTF-8”); response.sendRedirect(location); session.setAttribute(“username”,userName); } %> 帐号 密码 <input type="hidden" value="”> logout.jsp //discuz 地址 String forumURL=http://dddd:8066; String forward=MyRequest.getString(request,”forward”,””); //discuz 配置的私钥 String key = “12345678901”; String verify = “logout” + forward + key; verify = EncryptString.encryptMD5(verify); String location = forumURL+”/api/passport.php?action=logout&forward=”+URLEncoder.encode(forward, “UTF-8”)+”&verify=”+URLEncoder.encode(verify, “UTF-8”); response.sendRedirect(location); session.invalidate(); %> 本文转自 http://x.discuz.net/373789/viewspace-129435.html 你能给的也只有这么多,在这个狭小的圈子里,