????????????java???

????B/S????????????У????????????????????????????????????????????????????????????????????????????????п????????????????????????????????????????????????????????????????????????????????????????????????????????????

???????????

????1??????????е???Refresh/Reload/Back/Forward???????????Back??Submit?????????????reloading??????????

????2???????????????????????????????????????????????????????????????????(???????????)??

????3???ù?????й??????

?????????γ??·??

????1????basic filter??????????

????if(true){//????1?????????????????

??????..

????chain.doFilter(request??response);

????}else{

????//????2???????????????????????????

????}

????2?????????????

????a?????????????/?????????

????b????js?????????????????????????????????????????ж?????????

????var flag=true;

????function checkForm(){

????if (flag==false){

????return;

????}

????flag=false;

????document.form1.submit();

????}

????c??struts (webwork?????????????)

????//????????????????????????session?б?????????????input??????????????????

??????action?У?

????//

????if (!isTokenValid(request))

????errors.add(ActionErrors.GLOBAL_ERROR??

????new ActionError(“error.transaction.token”));

????resetToken(request); //???session?е?????

????action????????????????????????

????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);

????}

????}

????d??????????????????????????????????????п????????????????????????form???????????????????????????????????????????????????????????????????????????????????????form????????Щ??????????????????????Щ??????????????????????????servlet???????????????????????

??????????(Synchronizer (or Dvu) Token)

???????????????????????form???????????????????????????????Session?У???????????????????????form?С??? form???????form?е????????Session?е???????????????form???????????????????????????????????????????????form??????????????????????????????????form????????????????е??????????????????????form???????????????????

??????????棬?????????????????????????????????????????????????????£?

??????????棬?????????????????????????????????????????????????????£?Session?е??????????????μ??????????????form??

?????????????????????????????Щ??????????????????????????????????????????磬??????????????????????A?????????У?????? A???????????B??C?????????????????????????????A?????????????????????????????????????????????????????????????????????????????????????????????

????e???????hidden???????????????????????????session??????ж?session??????

?????????????

????1????????????????????Form?????????????hidden???????????????page?????????ж??????????????????(?? struts????????);????????button?????????ж?(struts?к??????)??????????????????????hidden text????????????????????

????2????basic filter?и???????hidden text??ж????????????

????3??javascript???????????????????????????????ж??????????????????hidden text?????????????ù???????á?