7
votes

Sécurité du ressort @peuthorize Hasrole () Propriétés Injection

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 xxx

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)

si je passe à xxx

Ça fonctionne très bien. Ma motivation à une telle utilisation est une meilleure flexibilité dans les tests d'application sur divers environnements.


1 commentaires

Nous avons des @configuration @bean propertysourcesplacesLolderconfigurier 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; La valeur correcte est présente


3 Réponses :


14
votes

Essayez de supprimer '' Signs: xxx

éditer. Je suis sûr qu'il y a une meilleure façon, mais en tant que Solution de contournement Vous pouvez appeler une méthode sur certains haricots: xxx


3 commentaires

Quand j'ai supprimé '' signes, j'ai eu: causé par: org.springframework.expression.spel.spelparseException: el1043e: (POS 9): jeton inattendu. Attendu 'Rparen ())' mais était 'LCurly ({)' Nom de propriété Remplacement Nothig


Essayez de remplacer $ par # : @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 :( - Stackoverflow.com/questions/19836387/...



1
votes

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: xxx


6 commentaires

`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 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.



0
votes

Immeuble sur d'autres réponses ici, une chose qui m'a déclenché n'était pas définissant le contexte sur le oauth2methodsecurityexpressionHandler .

Assurez-vous que dans votre méthodesConfigconfig Vous chargez le contexte des réponses ci-dessus pour fonctionner. xxx

alors vous pouvez accéder avec succès à xxx


0 commentaires