id | Number | Unique identity number. |
pid | Number | Number refering to the parent node. The value for the root node has to be -1. |
name | String | Text label for the node. |
url | String | Url for the node. |
title | String | Title for the node. |
target | String | Target for the node. |
icon | String | Image file to use as the icon. Uses default if not specified. |
iconOpen | String | Image file to use as the open icon. Uses default if not specified. |
open | Boolean | Is the node open. |
涓銆傚墠璦
浣犲湪浠諱綍涓涓瘮杈冧笓涓氱殑BBS閮戒細(xì)鐪嬪埌榪欐牱鐨勯棶棰橈紝鍗充嬌浣燝oogle涓涓嬶紝涔熶細(xì)鍙戠幇鏈夊緢澶氱殑浜哄湪鍏蟲(chóng)敞鍜岃闂紝浣嗗ぇ瀹剁粰鍑虹殑瑙e喅鏂規(guī)硶鍗撮兘鏄崈宸竾鍒紝錛堟湁
鐨勪漢涓誨紶閲囩敤鑴氭湰鏉ヨВ鍐?鏈夌殑鍒欐兂閲嶅畾鍚戝埌鍒殑欏甸潰;鏈夌殑鍒欏皢姝ら棶棰樻彁鍗囧埌Token鐨勮搴︼級(jí)涓轟粈涔堜細(xì)鏈夊姝ゅぇ鐨勫樊寮傚憿錛?/p>
浜屻傞棶棰樺満鏅?br /> 棣栧厛錛屾垜浠簲璇ュ厛浜?jiǎn)瑙d皋Z粈涔堣澶勭悊榪欐牱鐨勯棶棰橈紵鎴栬呬笓涓氫竴鐐瑰氨鏄畠閫傚悎鐨勫満鏅槸浠涔堬紵錛堜技涔庡彧鏈変漢鏉ラ棶娌℃湁浜烘潵瑙i噴錛?/p>
1銆傞噸澶嶆彁浜ゃ侀噸澶嶅埛鏂扮殑鍦烘櫙
閲嶅鎻愪氦銆侀噸澶嶅埛鏂伴兘鏄潵瑙e喅緋葷粺閲嶅璁板綍鐨勯棶棰樸備篃灝辨槸璇存煇涓漢鍦ㄥ嬈$殑鎻愪氦鏌愭潯璁板綍錛堜負(fù)浠涔堬紵涔熻鏄棽浜?jiǎn)娌℃湁浜嬫儏骞茬?鏈鏈夊彲鑳芥槸鐢ㄦ埛鏍規(guī)湰灝變笉鐭ラ亾鑷繁鐨勬彁浜ょ粨鏋滄槸鍚﹀凡緇忔墽琛屼簡(jiǎn)錛燂紒錛夈?/p>
浣嗗嚭鐜頒簡(jiǎn)榪欐牱鐨勯棶棰樺茍涓嶈寰楀氨蹇呴』澶勭悊錛岃鐪嬩綘鎵寮鍙戠殑緋葷粺鐨勭被鍒屽畾銆傛瘮濡備綘鎺ユ墜鐨勬槸鏌愪釜璧勬簮綆$悊緋葷粺錛岀郴緇熸湰韜粠闇姹傜殑瑙掑害鏍規(guī)湰灝變笉鍏佽鍑虹幇" 閲嶅"鐨勮褰曪紝鍦ㄨ繖鏍烽渶姹傜殑綰︽潫鏉′歡涓嬶紝鍘繪墽琛岄噸澶嶇殑鎻愪氦鍔ㄤ綔鍙細(xì)寮曞彂“涓氬姟綰у紓甯?#8221;鐨勪駭鐢燂紝鏍規(guī)湰灝變笉鍙兘鎵ц鎴愬姛涔熷氨鏃犳墍璋撻伩鍏嶄笉閬垮厤鐨勯棶棰樹(shù)簡(jiǎn)銆?/p>
2銆傞槻姝㈠悗閫鐨勫満鏅?br /> 浜?jiǎn)瑙d簡(jiǎn)閲嶅鍒锋柊銆侀噸澶嶆彁浜ょ殑鍦烘櫙錛屾垜浠潵浜?jiǎn)瑙d竴涓?闃叉鍚庨"鎿嶄綔鐨勫師鍥犳槸浠涔堬紵姣斿浣犲湪寮鍙戞煇涓姇紲ㄧ郴緇燂紝瀹冩湁寰堝鐨勬楠わ紝騫朵笖榪欎簺姝ラ涔嬮棿鏄湁鑱旂郴 鐨勶紝姣斿絎竴姝ヤ細(xì)灝嗘煇浜涗俊鎭彂閫佺粰絎簩姝ワ紝絎簩姝ョ紦瀛樹(shù)簡(jiǎn)榪欎簺淇℃伅錛屽悓鏃跺皢鑷韓鐨勪俊鎭彂閫佺粰浜?jiǎn)绗笁姝ャ傘傘傘傘傜瓑絳夛紝濡傛灉姝ゆ椂鐢ㄦ埛澶勫湪絎笁姝ラ涓嬶紝鎴戜滑鎯寵薄 涓涓嬫煇涓窐姘旂敤鎴風(fēng)殑鐢ㄦ埛鐐瑰嚮浜?jiǎn)鍚庨鎸夐挳錛屾鏃跺睆騫曞嚭鐜頒簡(jiǎn)絎簩姝ラ鐨勯〉闈紝浠栧啀嬈$殑淇敼鎴栬呭啀嬈$殑鎻愪氦錛岃繘鍏ュ埌涓嬩竴涓楠わ紙涔熷氨鏄涓夋楠わ級(jí)錛岄敊璇氨浼?xì)鍦ㄦ? 浜х敓錛燂紒浠涔堥敊璇憿錛熸渶涓哄吀鍨嬬殑灝辨槸榪欐牱鐨勬搷浣滅洿鎺ュ鑷翠簡(jiǎn)瀵逛簬絎竴涓楠や俊鎭殑涓㈠け錛侊紙濡傛灉榪欐牱鐨勪俊鎭槸渚濋潬Request瀛樻斁鐨勮瘽錛屽綋鐒朵綘鍙互瀛樻斁鍦? Session鎴栬呮洿澶х殑涓婁笅鏂囩幆澧冧腑錛屼絾榪欎笉鏄釜濂戒富鎰忥紒鍏充簬淇℃伅瀛樻斁鐨勯棶棰橈紝涓嬫鍦ㄥ氨榪欎釜闂璇︾粏鐨勮璁猴級(jí)
涓夈傚浣曞鐞嗙殑闂
褰撶劧寰堝鐨勭郴緇燂紙姣斿璁㈢エ緋葷粺浠庨渶姹備笂鏈韓鏄厑璁鎬釜浜洪噸澶嶈紲ㄧ殑錛夋槸蹇呴』瑕侀伩鍏嶉噸澶嶅埛鏂般侀噸澶嶆彁浜ゃ佷互鍙?qiáng)闃叉鍚庨鐨勯棶棰樼殑錛屼絾鍗充嬌鏄繖鏍風(fēng)殑闂錛屼篃瑕佸尯鍒?
濡備綍澶勭悊浠ュ強(qiáng)鍦ㄥ摢閲屽鐞嗙殑錛堢綉涓婂彧鏄憡璇変綘濡備綍澶勭悊錛屼絾寰堝皯鍘誨尯鍒嗗湪鍝噷澶勭悊鐨勶級(jí)錛屾樉鐒跺鐞嗙殑鏂瑰紡鏃犻潪鏄鎴風(fēng)鎴栬呮湇鍔″櫒绔袱縐嶏紝鑰岄潰瀵逛笉鍚岀殑浣嶇疆澶勭悊鐨?
鏂瑰紡涔熸槸涓嶅悓鐨勶紝浣嗘湁涓鐐硅浜嬪厛澹版槑錛氫換浣曞鎴風(fēng)錛堝挨鍏舵槸B/S绔級(jí)鐨勫鐞嗛兘鏄笉鍙俊浠葷殑錛屾渶濂界殑涔熸槸鏈搴旇鐨勬槸鏈嶅姟鍣ㄧ鐨勫鐞嗘柟娉曘?/p>
瀹㈡埛绔鐞嗭細(xì)
闈㈠瀹㈡埛绔垜浠彲浠ヤ嬌鐢↗avascript鑴氭湰鏉ヨВ鍐籌紝濡備笅
1銆傞噸澶嶅埛鏂般侀噸澶嶆彁浜?br />
Ways One錛氳緗竴涓彉閲忥紝鍙厑璁告彁浜や竴嬈°?br />
<script language="javascript">
var checkSubmitFlg = false;
function checkSubmit() {
if (checkSubmitFlg == true) {
return false;
}
checkSubmitFlg = true;
return true;
}
document.ondblclick = function docondblclick() {
window.event.returnValue = false;
}
document.onclick = function doconclick() {
if (checkSubmitFlg) {
window.event.returnValue = false;
}
}
</script>
<html:form action="myAction.do" method="post" onsubmit="return checkSubmit();">
Way Two : 灝嗘彁浜ゆ寜閽垨鑰卛mage緗負(fù)disable
<html:form action="myAction.do" method="post"
onsubmit="getElById('submitInput').disabled = true; return true;">
<html:image styleId="submitInput" src="images/ok_b.gif" border="0" />
</html:form>
2銆傞槻姝㈢敤鎴峰悗閫
榪欓噷鐨勬柟娉曟槸鍗冨Э鐧炬侊紝鏈夌殑鏄洿鏀規(guī)祻瑙堝櫒鐨勫巻鍙茬邯褰曠殑錛屾瘮濡備嬌鐢╳indow.history.forward()鏂規(guī)硶;鏈夌殑鏄?#8220;鐢ㄦ柊欏甸潰鐨刄RL鏇挎崲褰?
鍓嶇殑鍘嗗彶綰綍錛岃繖鏍鋒祻瑙堝巻鍙茶褰曚腑灝卞彧鏈変竴涓〉闈紝鍚庨鎸夐挳姘歌繙涓嶄細(xì)鍙樹(shù)負(fù)鍙敤銆?#8221;姣斿浣跨敤
javascript:location.replace(this.href); event.returnValue=false;
2.鏈嶅姟鍣ㄧ鐨勫鐞嗭紙榪欓噷鍙Struts妗嗘灦鐨勫鐞嗭級(jí)
鍒╃敤鍚屾浠ょ墝錛圱oken錛夋満鍒舵潵瑙e喅Web搴旂敤涓噸澶嶆彁浜ょ殑闂錛孲truts涔熺粰鍑轟簡(jiǎn)涓涓弬鑰冨疄鐜般?/p>
鍩烘湰鍘熺悊錛?br />
鏈嶅姟鍣ㄧ鍦ㄥ鐞嗗埌杈劇殑璇鋒眰涔嬪墠錛屼細(xì)灝嗚姹備腑鍖呭惈鐨勪護(hù)鐗屽間笌淇濆瓨鍦ㄥ綋鍓嶇敤鎴蜂細(xì)璇濅腑鐨勪護(hù)鐗屽艱繘琛屾瘮杈冿紝
鐪嬫槸鍚﹀尮閰嶃傚湪澶勭悊瀹岃璇鋒眰鍚庯紝涓斿湪絳斿鍙戦佺粰瀹㈡埛绔箣鍓嶏紝灝嗕細(xì)浜х敓涓涓柊鐨勪護(hù)鐗岋紝璇ヤ護(hù)鐗岄櫎浼犵粰
瀹㈡埛绔互澶栵紝涔熶細(xì)灝嗙敤鎴蜂細(xì)璇濅腑淇濆瓨鐨勬棫鐨勪護(hù)鐗岃繘琛屾浛鎹€傝繖鏍峰鏋滅敤鎴峰洖閫鍒板垰鎵嶇殑鎻愪氦欏甸潰騫跺啀嬈?br />
鎻愪氦鐨勮瘽錛屽鎴風(fēng)浼犺繃鏉ョ殑浠ょ墝灝卞拰鏈嶅姟鍣ㄧ鐨勪護(hù)鐗屼笉涓鑷達(dá)紝浠庤屾湁鏁堝湴闃叉浜?jiǎn)閲嶅鎻愪氦鐨勫彂鐢熴?/p>
if (isTokenValid(request, true)) {
// your code here
return mapping.findForward("success");
} else {
saveToken(request);
return mapping.findForward("submitagain");
}
Struts鏍規(guī)嵁鐢ㄦ埛浼?xì)璇滻D鍜屽綋鍓嶇郴緇熸椂闂存潵鐢熸垚涓涓敮涓錛堝浜庢瘡涓細(xì)璇濓級(jí)浠ょ墝鐨勶紝鍏蜂綋瀹炵幇鍙互鍙傝?br /> TokenProcessor綾諱腑鐨刧enerateToken()鏂規(guī)硶銆?/p>
1. //楠岃瘉浜嬪姟鎺у埗浠ょ墝,<html:form >浼?xì)鑷姩鏍规嵁session涓爣璇嗙敓鎴愪竴涓殣鍚玦nput浠h〃浠ょ墝錛岄槻姝袱嬈℃彁浜?br /> 2. 鍦╝ction涓細(xì)
//<input type="hidden" name="org.apache.struts.taglib.html.TOKEN"
// value="6aa35341f25184fd996c4c918255c3ae">
if (!isTokenValid(request))
errors.add(ActionErrors.GLOBAL_ERROR,
new ActionError("error.transaction.token"));
resetToken(request); //鍒犻櫎session涓殑浠ょ墝
3. action鏈夎繖鏍風(fēng)殑涓涓柟娉曠敓鎴愪護(hù)鐗?br />
protected String generateToken(HttpServletRequest request) {
HttpSession session = request.getSession();
try {
byte id[] = session.getId().getBytes();
byte now[] =
new Long(System.currentTimeMillis()).toString().getBytes();
MessageDigest md = MessageDigest.getInstance("MD5");
md.update(id);
md.update(now);
return (toHex(md.digest()));
} catch (IllegalStateException e) {
return (null);
} catch (NoSuchAlgorithmException e) {
return (null);
}
}
鎬葷粨
瀵逛簬閲嶅鎻愪氦銆侀噸澶嶅埛鏂般侀槻姝㈠悗閫絳夌瓑閮芥槸灞炰簬緋葷粺涓洪伩鍏嶉噸澶嶈褰曡岄渶瑕佽В鍐崇殑闂錛屽湪瀹㈡埛绔幓澶勭悊闇瑕侀拡瀵規(guī)瘡涓縐嶇殑鍙兘鎻愬嚭鐩稿簲鐨勮В鍐蟲(chóng)柟妗堬紝鐒惰屽湪鏈嶅姟鍣ㄧ鐪嬫潵鍙笉榪囨槸瀵逛簬鏁版嵁鐪熷疄鎬х殑媯(gè)楠岄棶棰橈紝鍩轟簬浠ょ墝鐨勫鐞嗗氨鏄竴鍔蟲(chóng)案閫哥殑鏂規(guī)硶銆?/p>
鍚屾椂鎴戜滑涔熺湅鍒幫紝浠庝笉鍚岀殑瑙掑害鍘葷湅寰呴棶棰橈紝鍏惰В鍐崇殑鏂規(guī)硶涔熸槸涓嶅悓鐨勩傚鎴風(fēng)鏇磋拷姹傜殑鏄敤鎴風(fēng)殑鎿嶄綔錛岃屾湇鍔$鍒欏皢娉ㄦ剰鍔涙斁鍦ㄤ簡(jiǎn)鏁版嵁鐨勫鐞嗕笂錛屾墍浠ュ湪鏌? 涓浜庢湇鍔″櫒绔湅浼煎鏄撶殑闂?shù)笂锛岀敤瀹㈡堬L(fēng)鏉ヨВ鍐沖嵈楹葷儲(chǔ)浜?jiǎn)寰堝锛佸弽涔嬩緷鐒躲傛墍浠ュ湪鏌愪簺闂鐨勫鐞嗕笂鎴戜滑闇瑕佺患鍚堣冭檻鍜屽鉤琛★紝鏄敤瀹㈡埛绔潵瑙e喅錛熻繕鏄敤鏈嶅姟 鍣ㄧ鏉ュ鐞嗭紵