L'injection de valeurs de propriété de propriété de fichier ou un fichier xml exiger une autorisation préalable(...) annotation java (non résolu)
J'ai posé cette question dans mon post précédent ici: SpEL pour le printemps de sécurité: la transmission de Valeurs à partir de XML pour Java SpEL de configuration. Mais il n'était pas encore résolu. Je veux injecter des valeurs à partir d'une configuration xml ou à partir d'un fichier externe dans @PreAuthorize(...)
annotation. Il n'est pas facile, comme d'injection en utilisant @Value
annotation.
De rappeler la question, je communique les informations suivantes.
- J'ai suivantes du fichier de configuration xml (example.xml)
a des propriétés et initialisé ses valeurs correspondantes.<beans> <bean id="userBean" class="x.y.User"> <property name="name" value="A"/> <property name="userId" value="33"/> <bean id="customerBean" class="x.y.Customer"> <property name="name" value="B"/> <property name="customerId" value="33"/> </bean> </beans>
- J'ai le texte suivant externe fichier de propriétés
(exemple.les propriétés) à l'intérieur de /dossier WEB-INF. Ce fichier est un
alternative pour le fichier de configuration XML mentionnés ci-dessus.user.id = 33 customer.id =33
- J'ai de la politique de la propriété du titulaire de la configuration dans mon applicationContext.xml fichier
<context:property-placeholder location="/WEB-INF/*.properties" ignore-unresolvable="true" /> <bean id="propertyConfig" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer" p:location="/WEB-INF/example.properties" p:ignoreUnresolvablePlaceholders="true" />
- J'ai deux classes de modèles:
User
etCustomer
public class User { private int userId; public int getUserId() { return userId; } } public class Customer { private int customerId; public int getCustomerId(){ return customerId; } }
- J'ai un autre service/contrôleur de classe qui je veux restreindre l'
le'edit'
, en utilisant la méthode@PreAuthorize
annotation.The restriction
: La méthode est autorisé (autorisé à être exécuté)
si et seulement si'userId'
et'customerId'
sont évalués égal!.Pour atteindre la restriction, je veux envisager de deux façons
- par l'injection de
'userId'
et'customerId'
valeurs à partir d'un fichier xml(example.xml) dans l'expression 1 ci-dessous. Les expressions que j'ai utilisé dans
ce sont suggérées par Rob Treuil (Merci Rob!). Toutefois, Le Printemps
ne pouvait pas évaluer l'expression. - par l'injection de
'userId'
et'customerId'
valeurs de l'extérieur par les propriétés du fichier(par exemple.les propriétés) dans l'expression 2
ci-dessous. De même, le printemps ne pouvait pas évaluer cette expression.@Service("..") or @Controller public class MyMainClass { //Expression 1 @PreAuthorize("@userBean.userId == @customerBean.customerId") public Boolean edit(User user, Customer custmer) { return true; } //Expression 2 ////I've tried other ways as well, but end up with similar exceptions @PreAuthorize("${user.id} == ${customer.id}") public Boolean edit(User user, Customer customer) { return true; } }
- par l'injection de
Mes questions:
T1. Quels sont les expressions que je dois mettre à l'intérieur de la @PreAuthorize
annotation d'injecter des valeurs dans le fichier xml (example.xml) ou à partir du fichier de propriétés (exemple.les propriétés) dans le @PreAuthorize(...)
expression, alors il peut facilement être évalués?
T2. Point de moi si j'ai fait des erreurs autres que les expressions.
T3. C'est comme un $1,000,000.00 de question pour moi que j'en ai marre que l'enfer pour résoudre ce problème!!!. Donc, s'il vous plaît aidez-moi autant que vous le pouvez!.
@Value
annotations que ceux qui se réfèrent à des espaces réservés et non pas une expression. Vous pouvez poster/ajoutez le plein stacktrace.OriginalL'auteur eyasu | 2013-11-04
Vous devez vous connecter pour publier un commentaire.
si vous êtes en utilisant les propriétés de fichier et que vous souhaitez accéder dans les classes de contrôleur, vous devez ajouter
<context:property-placeholder location="classpath:my.properties"/>
dans votre servlet contexte fichier xml, après que vous pouvez utiliser @Valeur de l'annotation pour obtenir les valeurs des propriétés. par exemplemy.properties
fichier contientsome.userid=33
donc vous l'accès à cette propriété à l'aide de:mais pour en être sûr pour objectif de test, je mettrais ignoreUnresolvablePlaceholders pour faux et dans le cas où il ne peut pas résoudre les propriétés de fichier, je voudrais savoir où l'erreur provient de...
espère que cela aide.
OriginalL'auteur kyla