Ne peut pas créer de jeton CSRF avec Ressort de Sécurité

Je suis en utilisant le Printemps de Sécurité 3.2.3 dans mon Spring MVC de l'application et d'obtenir un comportement inattendu.

Selon la la documentation ici, il devrait être possible d'utiliser ${_csrf.token} dans les balises meta de mon code html:

<meta name="_csrf" content="${_csrf.token}" />
<!-- default header name is X-CSRF-TOKEN -->
<meta name="_csrf_header" content="${_csrf.headerName}" />

D'où j'ai extrait la valeur de "contenu" à l'aide de JQuery et de le placer dans l'Entête de la Requête à l'aide d'AJAX.

Pour quelque raison que, le Printemps de Sécurité n'a pas de "convertir" cela en un réel jeton, il devient simplement envoyé dans l'en-tête comme une chaîne littérale "${_csrf.token}".

Essayer le trajet de l'aide ${_csrf.token} dans un caché d'entrée en fonction de la documentation, j'ai ensuite essayé de vérifier ce que le jeton évalue par la vérification de la saisie de la valeur, mais il est encore juste en texte brut "${_csrf.token}".

Depuis, il semble que le Printemps de Sécurité n'est pas en effet, je suis pas certains type de configuration? Je suis actuellement en utilisant un barebones Printemps de Sécurité Java de configuration (par opposition à xml) comme indiqué ici:

import org.springframework.context.annotation.*;
import org.springframework.security.config.annotation.web.builders.HttpSecurity;
import org.springframework.security.config.annotation.web.configuration.*;

@Configuration
@EnableWebSecurity
public class WebSecurityConfig extends WebSecurityConfigurerAdapter {

    @Override
    protected void configure(HttpSecurity http) throws Exception {
        http
          .csrf();
      }
}

Je sais configurer est appelé depuis que j'ai mis une version de débogage de déclaration en elle, donc je suppose que la protection CSRF est en effet activée car elle devrait être par défaut.

Je me rends compte que la syntaxe "${}" est l'Expression JSP le Langage, et je suis actuellement avec succès à l'aide d'évaluer le contexte dans un objet avec Thymeleaf, par exemple:

th:object="${context}"

Donc j'ai essayé d'ajouter "th:" en face de la balise meta "contenu" de la sorte:

<meta name="_csrf" th:content="${_csrf.token}"/>

Mais il en résulte une exception que cela ne peut pas être évalué:

Exception de l'évaluation de SpringEL expression: "_csrf.le jeton"

Je pense que la clé ici peut-être essayer de comprendre comment obtenir l'expression à évaluer correctement de mon point de vue.

Est-il possible que le "${_csrf.token}" syntaxe ne fonctionne que dans les JSP, pas une .fichier html?
Maintenant, le problème est qu'avec le Printemps de Sécurité en cours d'exécution, il fâcheusement veut authentifier l'utilisateur, même si nous avons déjà une méthode d'authentification mis en place déjà, si je reçois une erreur non autorisée. J'ai besoin de savoir comment contourner le Printemps de Sécurité de l'exigence de l'authentification qui est par défaut...il semble que pas de moyen simple de le désactiver, et si vous n'incluez pas la configuration de l'authentification, l'ensemble de l'application refuse de s'exécuter (affolant!). Je veux seulement le CSRF de la fonctionnalité de ce cadre! Continuera d'enquêter sur la façon de le contourner...
Ainsi, après des essais répétés, il semble que le Printemps de Sécurité fonctionne, mais encore j'ai juste une chaîne ${_csrf.token}. Je pense qu'il a à faire avec moi en utilisant un .fichier html lors de la JSP est nécessaire pour évaluer la valeur, mais de le changer pour un .fichier jsp résultats dans "org.thymeleaf.des exceptions.TemplateInputException: Erreur de la résolution du modèle {myapplication}, le modèle peut ne pas exister ou ne pas être accessible par toute de la configuration du Modèle de Résolveurs"
Juste pour dire que la th:content="${_csrf.whateverProperty}" forme dans les deux éléments META fonctionne pour moi. Printemps 4.1.x, Spring Security 4.0.x, Thymeleaf 2.1.x. Si j'utilise une propriété non valide nom-je obtenir SpelEvaluationException. Vous avait un problème de configuration au moment de la déclaration de l'origine du problème.

OriginalL'auteur starmandeluxe | 2014-05-15