You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何拦截Dojo框架应用的HTTP请求并添加CSRF Token

在Dojo框架中全局拦截HTTP请求并添加CSRF Token

方法一:使用Dojo请求拦截器(Interceptor)

Dojo的dojo/request模块支持通过全局拦截器统一处理所有请求,这是官方推荐的全局请求修改方式。

  1. 先实现CSRF Token的获取逻辑,示例从页面meta标签获取(根据后端实际存储方式调整,比如从cookie解析):
function getCsrfToken() {
  const metaEl = document.querySelector('meta[name="csrf-token"]');
  return metaEl ? metaEl.getAttribute('content') : '';
}
  1. 创建拦截器并全局注册:
require(['dojo/request', 'dojo/request/default'], function(request, defaultRequest) {
  const csrfInterceptor = function(url, options) {
    // 仅对修改型请求添加Token,GET请求通常无需CSRF保护
    if (options.method && /POST|PUT|DELETE|PATCH/i.test(options.method)) {
      options.headers = options.headers || {};
      // Header名称需和后端约定一致,比如X-CSRF-Token或X-XSRF-TOKEN
      options.headers['X-CSRF-Token'] = getCsrfToken();
    }
    return request(url, options);
  };

  // 将拦截器设置为默认请求处理逻辑
  defaultRequest.setDefaultInterceptor(csrfInterceptor);
});

方法二:使用dojo/aspect切面拦截底层请求方法

如果需要更底层的拦截(比如兼容旧版Dojo或自定义请求实现),可以用dojo/aspect来拦截请求发送的核心方法:

require(['dojo/aspect', 'dojo/request/xhr'], function(aspect, xhr) {
  // 拦截xhr模块的send方法
  aspect.around(xhr, 'send', function(originalSend) {
    return function(url, options) {
      if (options.method && /POST|PUT|DELETE|PATCH/i.test(options.method)) {
        options.headers = options.headers || {};
        options.headers['X-CSRF-Token'] = getCsrfToken();
      }
      // 调用原请求方法
      return originalSend.call(xhr, url, options);
    };
  });
});

关键注意事项

  • Token一致性:前端获取Token的方式必须和后端生成、校验的方式匹配,比如后端将Token存到XSRF-TOKEN cookie中,前端就要从cookie解析:
    function getCsrfToken() {
      return document.cookie.split('; ').find(row => row.startsWith('XSRF-TOKEN='))?.split('=')[1] || '';
    }
    
  • 请求类型过滤:GET请求一般不需要CSRF保护,避免不必要的Header添加。
  • 版本适配:上述代码针对Dojo 1.x,Dojo 2.x(@dojo/core/request)的拦截器配置逻辑类似,但模块导入路径和API细节有差异,需对应调整。
  • 跨域请求例外:如果应用使用JSONP(dojo/request/script)这类跨域GET请求,无需添加CSRF Token,这类场景的CSRF保护需依赖其他机制。

内容的提问来源于stack exchange,提问作者Amit Pokhrel

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.06 17:31:14