Jquery POST donnant 403 forbidden erreur dans spring mvc
Je veux faire un appel ajax à l'aide de $.POST. Mais j'obtiens une erreur 403. Mais OBTENIR fonctionne parfaitement bien. Mon code est:
var url = "/xyz/abc/subscribe?name="+name;
$.post(url, function(data){
alert(data);
});
Le contrôleur de code est :
@RequestMapping(value = "/xyz/abc/subscribe", method = RequestMethod.POST)
public @ResponseBody
String subscribe(@RequestParam("name") String name)
throws Exception {
String message = "TESTING";
return message;
}
Mais j'obtiens une erreur 403.
- Avez-vous une erreur dans les journaux du serveur d'applications?
- Non...je n'ai trouvé aucune erreur.
- Je suis arriver dans les journaux: org.springframework.de sécurité.d'accès.AccessDeniedException: l'Accès est refusé
- 403 signifie que le serveur peut correctement authentifier l'utilisateur, mais que l'utilisateur n'a pas les droits nécessaires pour effectuer l'opération sélectionnée. Êtes-vous à l'aide de Printemps de sécurité? Si donc, après la configuration correspondante
- J'ai eu la même erreur et ce n'est pas encore résolu stackoverflow.com/questions/25800657/...
Vous devez vous connecter pour publier un commentaire.
À l'aide de Printemps de Sécurité avec Java configuration, protection CSRF est activé par défaut.
Dans ce contexte, si vous faites une requête Ajax à un point de terminaison REST à l'aide de la méthode POST, vous obtiendrez un jeton csrf erreur manquant.
Pour résoudre ce problème, il y a deux options:
Option 1: Désactiver csrf
Option 2: Ajouter csrf de la requête ajax. Voir ici
@Override
deconfigure
suppose que votre contrôleur est une sous-classe de ce type/classe?POST
demande de l'aiderequests
bibliothèque en Python, et leGET
méthode a fonctionné, alors quePOST
ne pas. La désactivation de la protection CSRF résolu le problème. Merci!!!!Vous voudrez peut-être ajouter le jeton csrf de la demande.
Obtenir le jeton à l'aide de JSTL devrait être assez simple. Si vous utilisez Thymeleaf, voici comment l'obtenir.
Ajoutez-le ensuite à votre demande:
Si tout va bien, la demande doit inclure quelque chose comme
_csrf:1556bced-b323-4a23-ba1d-5d15428d29fa (le jeton csrf) et vous obtiendrez un 200 au lieu de 403.
Ceci est un exemple de sans désactiver CSRF.
Étape 1: Dans votre en-tête ajouter CSRF comme ce
Étape 2: Faire appel avec un jeton
Si vous regardez à CSRFilter code source, vous verrez que le filtre est en attente pour csrfToken sur l'en-tête ou le paramètre de requête.
Dans ma configuration, la touche "_csrf" a la bonne clé en paramètre de requête.
Donc, j'ai ajouté ce paramètre dans mon post d'appel.
HTML:
Cela fonctionne pour moi.
Que vous essayez de faire une requête POST à un point de terminaison REST vous n'êtes pas autorisé à. Votre session est devenu invalide, ou l'utilisateur que vous êtes connecté en tant n'a pas l'autorité comme @geoand déjà souligné.