AngularJS e Spring Security com ROLE_ANONYMOUS ainda retornam 401
Estamos construindo um aplicativo de material angular, consumindo uma API RESTful Spring MVC, com Spring Security e OAUTH2.
Para fins de teste, concedemos acesso a ROLE_ANONYMOUS ao terminal / usuários:
<intercept-url pattern="/users" method="POST" access="ROLE_ANONYMOUS"/>
Mas quando tentamos enviar um JSON pelo POST, ainda recebemos uma resposta 401 do servidor.
Isso não está acontecendo com clientes não angulares como o Postman.Se desativarmos o filtro Spring Security, tudo funcionará bem.Solicitações GET para o mesmo terminal também funcionam bem.Este é o nosso app.config:
angular.module('App')
.constant('RESOURCES', (function () {
var resource = 'http://localhost:8080';
return {
USERS: resource + '/users'
}
})());
E a fábrica fazendo o método POST:
app.factory('LoginUser', ['RESOURCES', '$resource', function (RESOURCES, $resource) {
return $resource(RESOURCES.USERS, null, {
add: {method: 'POST'}
});
}]);
E o método de inscrição no controlador:
function signup(user) {
LoginUser.add({}, JSON.stringify(user));
}
Temos a configuração do SimpleCORSFilter no servidor, seguindo as instruçõesGuia de molas.
Você pode ver a comparação entre o carteiro POST e o AngularJS POST aqui:
O cabeçalho marcado em vermelho é um personalizado que precisamos adicionar no Postman para evitar um tipo de mídia não suportado.
Tentamos colocar cabeçalhos personalizados na solicitação POST no AngularJS, mas não parece estar funcionando:
.config(function ($httpProvider) {
$httpProvider.defaults.headers.put['Content-Type'] = $httpProvider.defaults.headers.post['Content-Type'] =
'application/json; charset=UTF-8';
});