En supposant que ma sécurité et mes propriétés de printemps soient configurées correctement, je voudrais utiliser le nom du rôle de propriété comme J'ai essayé comme dans l'échantillon de code ci-dessus, mais cela ne fonctionne pas (il ne fonctionne pas Prise '$ {role.rolename}' String en tant que rôle à comparer) p> si je passe à p> Ça fonctionne très bien.
Ma motivation à une telle utilisation est une meilleure flexibilité dans les tests d'application sur divers environnements. P> P>
3 Réponses :
Essayez de supprimer '' code> Signs:
Quand j'ai supprimé '' code> signes, j'ai eu:
causé par: org.springframework.expression.spel.spelparseException: el1043e: (POS 9): jeton inattendu. Attendu 'Rparen ())' mais était 'LCurly ({)' Code> Nom de propriété Remplacement Nothig
Essayez de remplacer $ code> par
# code>: @peuthorize ("hasrole (# {rôle.rolename})")
Il est clair de cette réponse que les citations simples sont fausses, mais il semblerait que nous devrions pouvoir référencer les propriétés avec $ {}, mais cela ne semble pas fonctionner :( -
J'ai constaté que vous pouvez simplement saisir la propriétéResolver et tirer des valeurs directement à partir de cela, au lieu d'écrire votre propre classe, comme l'a suggéré @MakSym.
example: p>
`org.springframework.beans.Factory.noschbeandeFinitionFinitionExcept ion: No Bean nommé" ProperyResolver "disponible"
@jbx - Vous devez utiliser le nom de haricot de tout ce que votre résolveur de la propriété est. Donc, si vous avez nommé votre autre autre, échangez cela à la place.
Et comment est-ce différent de rédiger votre propre classe?
Le printemps fournit un résolveur de la propriété sans avoir à en écrire un. Il vous suffit de vous assurer d'utiliser le nom de haricot que Spring s'y attribue (quoi que ce soit, ou si vous avez renommé le haricot). Cela fonctionne pour moi. Je l'utilise sur tous mes contrôleurs nécessitant une sécurité.
Donc, peut-être que vous avez besoin de la partie de configuration qui initialise le résolveur de la propriété en tant que @bean code> et que vous l'avez ailleurs dans votre code? À sa propre ligne ne fonctionne pas.
@jbx - Vous avez raison. J'avais le mien remplacé. Essayez @ Environnement.getProperty (...) à la place. C'est le nom par défaut que le démarrage à ressort attribue le résolveur de la propriété. J'ai mis à jour la réponse.
Immeuble sur d'autres réponses ici, une chose qui m'a déclenché n'était pas définissant le contexte sur le Assurez-vous que dans votre alors vous pouvez accéder avec succès à p> oauth2methodsecurityexpressionHandler code>.
méthodesConfigconfig code> Vous chargez le contexte des réponses ci-dessus pour fonctionner. p>
Nous avons des
@configuration code> où
@bean propertysourcesplacesLolderconfigurier code> est configuré, mais je suis sûr que la propriété est câblée correctement parce que lorsque je définis dans la même classe où la méthode sécurisée où la méthode sécurisée: < Code> @Value ("$ {role.rolename}") String privé role_name; code> La valeur correcte est présente