Một tùy chọn khác để xử lý tất cả các yêu cầu mà tôi đã sử dụng trong thực tế của mình cho các trường hợp khi tải lên không thể giúp được là xử lý các yêu cầu gửi javascript, gửi html, ajax. Những mã này nên được thêm vào phần trên cùng của phần thân để tạo trình xử lý trước khi bất kỳ biểu mẫu nào được hiển thị và gửi.
Trong ví dụ, tôi đặt trường ẩn thành bất kỳ biểu mẫu nào trên trang khi gửi nó ngay cả khi nó xảy ra trước khi tải trang.
(function (send) {
var token = $("meta[name='_csrf']").attr("content");
var header = $("meta[name='_csrf_header']").attr("content");
XMLHttpRequest.prototype.send = function (data) {
if (isNotEmptyString(token) && isNotEmptyString(header)) {
this.setRequestHeader(header, token);
}
send.call(this, data);
};
})(XMLHttpRequest.prototype.send);
(function (submit) {
HTMLFormElement.prototype.submit = function (data) {
var token = $("meta[name='_csrf']").attr("content");
var paramName = $("meta[name='_csrf_parameterName']").attr("content");
$('<input>').attr({
type: 'hidden',
name: paramName,
value: token
}).appendTo(this);
submit.call(this, data);
};
})(HTMLFormElement.prototype.submit);
document.body.addEventListener('submit', function (event) {
var token = $("meta[name='_csrf']").attr("content");
var paramName = $("meta[name='_csrf_parameterName']").attr("content");
$('<input>').attr({
type: 'hidden',
name: paramName,
value: token
}).appendTo(event.target);
}, false);