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.
- 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>
- 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
- 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" />
- Habe ich zwei Modell-Klassen:
User
undCustomer
public class User { private int userId; public int getUserId() { return userId; } } public class Customer { private int customerId; public int getCustomerId(){ return customerId; } }
- 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
- 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. - 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; } }
- durch Einspritzen
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!.
@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
Du musst angemeldet sein, um einen Kommentar abzugeben.
wenn Sie die Eigenschaften-Datei, und Sie wollen, um Ihnen den Zugang in die controller-Klassen, die Sie hinzufügen müssen, um die
<context:property-placeholder location="classpath:my.properties"/>
in Ihrem servlet-Kontext-xml-Datei, danach können Sie mit den @Value-annotation, um die Werte der Eigenschaften. z.B.my.properties
Datei enthältsome.userid=33
so würden Sie auf diese Eigenschaft zugreifen mit:aber sicher sein, für Testzwecke würde ich ignoreUnresolvablePlaceholders auf false gesetzt und falls es nicht behoben werden kann Eigenschaften der Datei würde ich wissen, wo der Fehler herkommt...
hoffe, es hilft.
InformationsquelleAutor kyla