Angular Jhipster - 如何在所有http请求中发送x-csrf令牌?

时间:2015-08-04 21:45:47

标签: angularjs csrf jhipster

我从Hipster generator生成一个app并创建一个新工厂来调用我的服务。

所有现有服务都在标题中使用x-csrf令牌调用,但是当我尝试使用我的工厂制作获取或发布时,我得到错误 401 未经授权< /强>

在我的应用配置中,我有这个:

class myMenu(tk.Menu):
    def __init__(self, parent):
        tk.Menu.__init__(self, parent)
        self.listeners = {} #dict to keep listeners
        return

    def add_event_listeners(self, event, listeners):
        if not isinstance(listeners, list):
            listeners = [listeners]
        if(event in self.events_listeners.keys()):
            self.events_listeners[event] += listeners
        else:
            self.events_listeners[event] = listeners
        return

    ''' some menu components setup including internal events'''

    def open_file(self, filename):
        ''' some internal handling menu '''
        self.open_file_handler(filename)

        ''' broadcast event to registered widgets '''
        for listener in self.event_listeners[virt_event]:
            listener.event_generate(virt_event, when='tail')
        return

这是我的工厂:

 //enable CSRF
    $httpProvider.defaults.xsrfCookieName = 'CSRF-TOKEN';
    $httpProvider.defaults.xsrfHeaderName = 'X-CSRF-TOKEN';

当我执行findAll函数时,我收到此错误:

angular.module('jhipsterApp')
    .factory('WalletsService', function ($http) {
        return {
            findAll: function () {
                return $http.get('api/walletslist/').then(function (response) {
                    return response.data;
                });
            }
        };
    });

x-csrf保存在cookie中,但我如何在标题中传递它?

感谢

1 个答案:

答案 0 :(得分:1)

查看SecurityConfiguration,/ api / **需要身份验证,因此您的端点也需要它。它不是CSRF问题,只是您必须登录。

如果必须公开api / walletslist,则必须在SecurityConfiguration

中执行此操作
.antMatchers("/api/walletslist").permitAll()

警告:订单很重要,请确保您的授权网址与角度服务和REST控制器请求映射相匹配。在一个地方很容易忘记最后的斜线字符。

为什么要使用$ http,为什么不像其他JHipster服务一样使用$ resource?