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.

  1. 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>
  2. 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
  3. 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" />
  4. J'ai deux classes de modèles: User et Customer
    public class User {
        private int userId;
    
    public int getUserId() {
            return userId;
        }
    }
    
    public class Customer {
        private int customerId;
    
        public int getCustomerId(){
            return customerId;
        }
    }
  5. 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

    1. 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.
    2. 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;
          }
      }

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

Votre deuxième expression ne fonctionne que dans @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