【发布时间】:2021-01-10 16:32:26
【问题描述】:
我正在尝试将安全令牌添加到我的所有 AJAX $.post 调用中。
我将安全令牌设置为使用 following code 自动添加
$.ajaxSetup({
beforeSend: function (jqXHR, settings) {
settings.data += "&sessionID="+v_sessionID;
}
});
然后像下面这样的代码,将自动附加安全令牌
$.post("ajax/p_getOnePosition.jsp", {
positionNo: positionNo,
}, function(response2) {
代码运行良好,但不适用于没有参数的函数,例如
$.post("ajax/p_clearFilters.jsp", {
}, function(response2) {
知道为什么会这样吗?
我可以通过简单地在代码中添加一个虚拟参数dummy:1 来修复它
$.post("ajax/p_clearFilters.jsp", {
dummy:1
}, function(response2) {
所以我试着去做
$.ajaxSetup({
beforeSend: function (jqXHR, settings) {
var noParameters=(settings.data==null || settings.data==undefined || settings.data=='');
settings.data += (noParameters?"dummy=1":"") +"&sessionID="+v_sessionID;
}
});
但这并没有模仿手动添加dummy=1,并且请求中没有安全令牌。
更新
回想起来(在@Rory McCrossan 的评论和@Louys Patrice Bessette 的回答之后)我意识到我的问题是不完整的。我还应该在我的问题中包含用于检索参数的 JSP 代码。
<%
String csrfSessionID = SecurityIssues.StringToAlphaNumericStr(request.getParameter("sessionID"));
%>
【问题讨论】:
-
我无法复制该问题:jsfiddle.net/RoryMcCrossan/5ng8kohm。如果您在控制台的网络选项卡中检查请求,您将在请求负载中看到
&sessionId值。 但是在这种情况下,密钥上的前导&可能会导致您的服务器端出现问题。尝试改进逻辑,以便仅在必要时添加&。 -
非常感谢@RoryMcCrossan 花时间尝试复制问题。通过运行您的代码,我看到 - 正如您所写 - sessionId 值在“请求有效负载”中。但是当 //positionNo:1 未注释时,PositionNo 和 sessionId 值都显示为“表单数据”。看来我只能从“表单数据”而不是“请求有效负载”中成功检索数据。任何想法为什么会这样?
-
我也确实尝试在问题末尾的代码中处理领先的
&。谢谢!