Die Injektion Eigenschaft Werte aus property-Datei oder xml-Datei in PreAuthorize(...) java-annotation (Ungelöste)

Ich habe diese Frage in meinem vorherigen post hier: SpEL für spring security: Übergabe von Werten aus XML Java-basierte Konfiguration SpEL. Aber es war noch nicht gelöst. Ich will Spritzen-Werte entweder aus einer xml-Konfiguration oder aus externer Datei in @PreAuthorize(...) annotation. Es ist nicht leicht, wie die Injektion von mit @Value annotation.

Zu erinnern, die Frage, die ich von Ihnen die folgenden Informationen.

  1. Ich habe die folgende xml-Konfigurationsdatei (example.xml) ,
    Eigenschaften besitzt und initialisiert seine entsprechenden Werte.

    <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. Habe ich die folgenden externen properties-Datei
    (Beispiel.Eigenschaften) innerhalb von /WEB-INF-Ordner. Diese Datei ist ein
    alternative für die XML-Konfigurationsdatei oben erwähnt.

    user.id = 33
    customer.id =33
  3. Ich habe Eigentum Versicherungsnehmer Konfiguration in meinem applicationContext.xml Datei
    <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. Habe ich zwei Modell-Klassen: User und Customer
    public class User {
        private int userId;
    
    public int getUserId() {
            return userId;
        }
    }
    
    public class Customer {
        private int customerId;
    
        public int getCustomerId(){
            return customerId;
        }
    }
  5. Habe ich ein anderes service - /controller-Klasse, die ich will, um zu beschränken
    die 'edit' - Methode, indem Sie @PreAuthorize annotation.

    The restriction: Die Methode ist nicht zulässig (genehmigtes ausgeführt werden.)
    wenn, und nur wenn 'userId' und 'customerId' werden gleich bewertet!.

    Zur Erreichung der Einschränkung, möchte ich zwei Möglichkeiten

    1. durch Einspritzen 'userId' und 'customerId' Werte aus der xml-Datei(example.xml) in den Ausdruck 1 unten. Die Ausdrücke, die ich verwendet
      diese werden auf Vorschlag Rob Winch (Danke Rob!). Allerdings, Frühling
      konnte nicht den Ausdruck auszuwerten.
    2. durch Einspritzen 'userId' und 'customerId' Werte aus der externen properties-Datei(Beispiel.Eigenschaften) in den Ausdruck 2
      unten. Ebenso, der Frühling konnte nicht auswerten dieses Ausdrucks als gut.

      @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;
          }
      }

Meine Fragen:

Q1. Was sind die richtigen Ausdrücke, die ich setzen muss, innerhalb der @PreAuthorize Kommentar zu injizieren Werte aus der xml-Datei (example.xml) oder aus einer property-Datei (Beispiel.Eigenschaften) in die @PreAuthorize(...) Ausdruck, dann kann es leicht ausgewertet?

Q2. Zeigen Sie mir, wenn ich Fehler anderen als die Ausdrücke.

Q3. Wie seine $1.000.000.00 Frage für mich, da ich es Leid bin, als die Hölle um dieses Problem zu lösen!!!. Also bitte helfen Sie mir, so viel wie Sie können!.

Ihre zweite Ausdruck funktioniert nur in @Value Anmerkungen als diejenigen beziehen, um Platzhalter und nicht um eine Meinungsäußerung. Können Sie veröffentlichen/hinzufügen den vollständigen stacktrace.

InformationsquelleAutor eyasu | 2013-11-04

Schreibe einen Kommentar