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';
});