1 javascript, atur variabel dan hanya izinkan pengiriman satu kali.
<skrip bahasa="javascript">
var checkSubmitFlg = salah;
fungsi checkSubmit() {
if (checkSubmitFlg == benar) {
kembali
salah;
}
checkSubmitFlg = benar
}
dokumen.ondblclick = fungsi docondblclick() {
window.event
.returnValue=
false;
}
document.onclick = function doconclick() {
if
(checkSubmitFlg) {
window.event.returnValue = false
;
<html:form action="myAction.do" method="post" onsubmit="return checkSubmit();">
2 Masih menggunakan javascript, setel tombol kirim atau gambar untuk menonaktifkan
<html:form action="myAction.do" metode ="post"
onsubmit="getElById('submitInput').disabled = true; return true;">
<html:image styleId="submitInput" src="images/ok_b.gif" border="0" />
< / html:form>
3 Gunakan mekanisme token sinkronisasi struts
untuk menyelesaikan masalah pengiriman berulang dalam aplikasi web. Struts juga menyediakan implementasi referensi.
Prinsip dasar:
Sebelum memproses permintaan masuk, server akan membandingkan nilai token yang terdapat dalam permintaan dengan nilai token yang disimpan dalam sesi pengguna saat ini untuk melihat apakah ada kecocokan. Setelah permintaan diproses dan sebelum balasan dikirim ke klien, token baru akan dibuat. Selain diteruskan ke klien, token ini juga akan menggantikan token lama yang disimpan di sesi pengguna. Dengan cara ini, jika pengguna kembali ke halaman pengiriman sebelumnya dan mengirimkan lagi, token yang diteruskan oleh klien akan tidak konsisten dengan token di sisi server, sehingga secara efektif mencegah pengiriman berulang.
if (isTokenValid(request, true)) {
// kode Anda di sini
return maping.findForward("success");
else {
saveToken
(request);
returnmaping.findForward
("submitagain");
ID dan Waktu sistem saat ini digunakan untuk menghasilkan token unik (untuk setiap sesi). Untuk implementasi spesifik, lihat metode generateToken() di kelas TokenProcessor.
1.
//Verifikasi token kontrol transaksi. <html:form> akan secara otomatismenghasilkan
token perwakilan input implisit berdasarkan pengidentifikasi dalam sesi untuk mencegah pengiriman ganda.
nama ="org.apache.struts.taglib.html.TOKEN"
// value="6aa35341f25184fd996c4c918255c3ae">
if (!isTokenValid(request))
error.add(ActionErrors.GLOBAL_ERROR,
new ActionError("error.transaction.token") ) ;
resetToken(request); //Hapus token di sesi
3. Tindakan memiliki metode untuk menghasilkan token
yang dilindungi String generateToken(
HttpServletRequest request) {
HttpSession session = request.getSession()
; ().getBytes();
byte sekarang[] =
new Long(System.currentTimeMillis()).toString().getBytes();
MessageDigest
md
= MessageDigest.getInstance("MD5");
.update(sekarang);
kembali (toHex(md.digest()));
} tangkapan (IllegalStateException e) {
kembali (null);
} tangkapan (NoSuchAlgorithmException e) {
kembali (null
)
;