AngularJS & Spring Security mit ROLE_ANONYMOUS gibt weiterhin 401 zurück

Wir erstellen eine Angular Material-Anwendung, die eine RESTful Spring MVC-API mit Spring Security & OAUTH2 verwendet.

Zum Testen haben wir ROLE_ANONYMOUS Zugriff auf unseren / users-Endpunkt gewährt:

<intercept-url pattern="/users" method="POST" access="ROLE_ANONYMOUS"/>

Aber wenn wir versuchen, einen JSON per POST zu senden, erhalten wir immer noch eine 401-Antwort vom Server.

Das passiert nicht mit nicht eckigen Kunden wie Postman.Wenn wir den Spring Security-Filter deaktivieren, funktioniert alles einwandfrei.GET-Anforderungen an denselben Endpunkt funktionieren ebenfalls einwandfrei.

Dies ist unsere app.config:

  angular.module('App')
    .constant('RESOURCES', (function () {
                var resource = 'http://localhost:8080';
                return {
                  USERS: resource + '/users'
                }
              })());

Und die Fabrik, die die POST-Methode ausführt:

  app.factory('LoginUser', ['RESOURCES', '$resource', function (RESOURCES, $resource) {
    return $resource(RESOURCES.USERS, null, {
                       add: {method: 'POST'}
                     });
  }]);

Und die Anmeldemethode im Controller:

  function signup(user) {
    LoginUser.add({}, JSON.stringify(user));
  }

Wir haben das SimpleCORSFilter-Setup auf dem Server nach demSpring guide.

Sie können den Vergleich zwischen dem Postboten-POST und dem AngularJS-POST hier sehen:

Die rot markierte Kopfzeile ist eine benutzerdefinierte, die wir in Postman hinzufügen müssen, um zu vermeiden, dass 415 Medientypen nicht unterstützt werden.

Wir haben versucht, benutzerdefinierte Header in die POST-Anforderung in AngularJS einzufügen, aber es scheint nicht zu funktionieren:

.config(function ($httpProvider) {
    $httpProvider.defaults.headers.put['Content-Type'] = $httpProvider.defaults.headers.post['Content-Type'] =
        'application/json; charset=UTF-8';
});

Antworten auf die Frage(2)

Ihre Antwort auf die Frage