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

如何让AngularJS 1.5在Cookie路径为/forum-rest时添加X-XSRF-TOKEN头

解决方案:AngularJS 1.5 + Spring Security CSRF(限定Cookie路径为"/forum-rest")

核心问题分析

AngularJS默认仅自动读取**路径为"/"**的XSRF-TOKEN Cookie,并自动为请求添加X-XSRF-TOKEN头。当Cookie路径设为"/forum-rest"时,只有当前端页面的URL路径属于"/forum-rest"子路径时,浏览器才允许页面读取该Cookie;若前端页面部署在其他路径(比如根路径"/"),则无法直接访问此Cookie,手动读取也会失败。


可行解决方法

方法1:调整前端页面部署路径

将前端静态资源部署到/forum-rest路径下(比如后端把前端文件放在/forum-rest对应的静态资源目录)。此时页面与Cookie同属一个路径范围,AngularJS会自动读取Cookie并携带X-XSRF-TOKEN头,无需额外配置。

方法2:自定义AngularJS的XSRF拦截器

通过后端接口获取Token后手动管理,再配置拦截器添加请求头:

  1. 后端新增接口(如/forum-rest/get-csrf-token),返回当前CSRF Token值:
@GetMapping("/forum-rest/get-csrf-token")
@ResponseBody
public Map<String, String> getCsrfToken(HttpServletRequest request) {
    CsrfToken token = (CsrfToken) request.getAttribute(CsrfToken.class.getName());
    Map<String, String> result = new HashMap<>();
    result.put("token", token.getToken());
    return result;
}
  1. 前端初始化时调用该接口,将Token存入全局变量或本地存储,再配置$http拦截器为目标请求添加头:
angular.module('yourApp', [])
  .config(['$httpProvider', function($httpProvider) {
    $httpProvider.interceptors.push(['$rootScope', function($rootScope) {
      return {
        request: function(config) {
          // 仅对/forum-rest开头的请求添加CSRF头
          if (config.url.startsWith('/forum-rest')) {
            config.headers['X-XSRF-TOKEN'] = $rootScope.csrfToken;
          }
          return config;
        }
      };
    }]);
  }])
  .run(['$http', '$rootScope', function($http, $rootScope) {
    // 初始化获取CSRF Token
    $http.get('/forum-rest/get-csrf-token')
      .then(function(response) {
        $rootScope.csrfToken = response.data.token;
      });
  }]);

方法3:改用请求参数传递CSRF Token

若业务允许,可通过请求参数传递Token(Spring Security默认支持从_csrf参数读取):
前端发起请求时,将Token放入请求体或URL参数中:

$http.post('/forum-rest/api/post', {
  content: '示例内容',
  _csrf: $rootScope.csrfToken
});

注:此方式安全性略低于Header传递,建议优先选用前两种方法。


内容的提问来源于stack exchange,提问作者Joe D

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.07 12:22:41