spring - 如何在单页应用程序(spring security)中提供 CSRF Token?

标签 spring spring-security csrf single-page-application

当我尝试使用 ajax 加载页面的一部分时出现 403 错误

Invalid CSRF Token 'null' was found on the request parameter '_csrf' or header 'X-CSRF-TOKEN'.

Spring Security FAQ 告诉我们

If an HTTP 403 Forbidden is returned for HTTP POST, but works for HTTP GET then the issue is most likely related to CSRF. Either provide the CSRF Token or disable CSRF protection (not recommended).

那么,如何才能做到这一点?

function getPage(url) {
    $.ajax({
        type: 'POST',
        url: url,
        data: {_csrf: "??"},
        success: function (data) {
            loadPage(url, data);
        }
    });
}

最佳答案

您可以从存储在您客户端的 cookie 中获取 token 。为此你必须使用像这样的 cookie 服务: https://www.npmjs.com/package/angular2-cookie

写一个这样的函数来获取 token :

getCookie(){
    return this._cookieService.get("token-name");
}

最后将 token 添加到请求头中:

doSomething(token){
    var json = JSON.stringify({});
    var headers = new Headers();
    headers.append('Content-Type','application/json');
     headers.append('token-name', token);
    return this._http.post('http://localhost:8080/doSomething', json, {
        headers: headers
    }).map(res => res.text()
    );
}

这解决了我的问题

关于spring - 如何在单页应用程序(spring security)中提供 CSRF Token?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27824273/

相关文章:

java - 通量处理器 : retrieve last emitted value on subscribe like rx's Subject

spring - 集群中的文件夹轮询

java - 通过 spring-security 代码注销

json - 成功调用 URL 后,Spring RESTful Web 服务返回 404

java - Spring 启动 : BeanFactoryPostProcessor's postProcessBeanFactory not getting called

spring - 自动连线……不止一个?

authentication - Grails 应用程序中的安全性 : Acegi or Shiro

mongodb - Grails、Spring Security 和 Mongo

javascript - Angular 针对 Asp.Net WebApi,在服务器上实现 CSRF

rest - 具有 CSRF 和 XSS 保护的无状态 REST API