1 Javascript, legen Sie eine Variable fest und erlauben Sie die Übermittlung nur einmal.
<script language="javascript">
var
checkSubmitFlg=
false;
function checkSubmit() {
if (checkSubmitFlg == true) {
return false
}
checkSubmitFlg
= true
;
.returnValue = false;
}
document.onclick = function doconclick() {
if (checkSubmitFlg) {
window.event.returnValue = false
}
</script>
;
<html:form action="myAction.do" method="post" onsubmit="return checkSubmit();">
2 Verwenden Sie immer noch Javascript, stellen Sie die Schaltfläche oder das Bild zum Senden so ein, dass
<html:form action="myAction.do"
deaktiviert wird.method ="post"
onsubmit="getElById('submitInput').disabled = true; return true;">
<html:image styleId="submitInput" src="images/ok_b.gif" border="0" />
< / html:form>
3 Verwenden Sie den Synchronisationstokenmechanismus von Struts,
um das Problem wiederholter Übermittlungen in Webanwendungen zu lösen. Struts bietet auch eine Referenzimplementierung.
Grundprinzip:
Vor der Verarbeitung einer eingehenden Anfrage vergleicht der Server den in der Anfrage enthaltenen Token-Wert mit dem in der aktuellen Benutzersitzung gespeicherten Token-Wert, um festzustellen, ob eine Übereinstimmung vorliegt. Nachdem die Anfrage verarbeitet wurde und bevor die Antwort an den Client gesendet wird, wird ein neues Token generiert. Dieses Token wird nicht nur an den Client übergeben, sondern ersetzt auch das alte Token, das in der Benutzersitzung gespeichert wurde. Wenn der Benutzer auf diese Weise zur vorherigen Übermittlungsseite zurückkehrt und erneut übermittelt, stimmt das vom Client übergebene Token nicht mit dem Token auf der Serverseite überein, wodurch wiederholte Übermittlungen wirksam verhindert werden.
if(
isTokenValid(request, true)) {
//
Ihr Code hier
returnprogramming.findForward
("
success")
;
ID und Die aktuelle Systemzeit wird verwendet, um ein eindeutiges (für jede Sitzung) Token zu generieren. Informationen zur spezifischen Implementierung finden Sie in der Methode „generateToken()“ in der Klasse „TokenProcessor“.
1. //Überprüfen Sie das Transaktionskontroll-Token. <html:form> generiert automatisch ein implizites Eingabe-Repräsentativ-Token basierend auf der Kennung in der Sitzung, um eine doppelte Übermittlung zu verhindern.
2. In der Aktion:
//<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); //Das Token in Sitzung 3 löschen.
Aktion hat eine Methode zum Generieren eines
tokengeschützten Strings genericToken(HttpServletRequest request) {
HttpSession session = request.getSession();
try {
byte id[] = session .getId ().getBytes();
byte now[] =
new Long(System.currentTimeMillis()
).toString().getBytes();
MessageDigest.getInstance
("MD5");
.update(
now);
return
(toHex(
md.digest(
))
)
;