Wstrzykiwanie wartości właściwości z pliku właściwości lub pliku xml do PreAuthorize (…) adnotacja java (nierozwiązana)
Zadałem to pytanie w poprzednim poście tutaj:SpEL dla wiosennego bezpieczeństwa: przekazywanie wartości z XML do konfiguracji SpEL opartej na Javie. Ale to jeszcze nie zostało rozwiązane. Chcę wprowadzić wartości z konfiguracji xml lub z pliku zewnętrznego do@PreAuthorize(...)
adnotacja. Nie jest to łatwe, jak wstrzykiwanie za pomocą@Value
adnotacja.
Aby przypomnieć pytanie, podaję następujące informacje.
Mam następujący plik konfiguracyjny xml (przykład.xml), który ma właściwości i zainicjował odpowiednie wartości.
<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>
Mam następujący plik właściwości zewnętrznych (example.properties) w folderze / WEB-INF. Ten plik jest alternatywą dla wspomnianego powyżej pliku konfiguracyjnego XML.
user.id = 33
customer.id =33
Mam konfigurację posiadacza zasad nieruchomości w moim pliku applicationContext.xml
<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" />
Mam dwie klasy modeli:User
iCustomer
public class User {
private int userId;
public int getUserId() {
return userId;
}
}
public class Customer {
private int customerId;
public int getCustomerId(){
return customerId;
}
}
Mam inną klasę usługi / kontrolera, którą chcę ograniczyć'edit'
metoda przy użyciu@PreAuthorize
adnotacja.
The restriction
: Metoda jest dozwolona (autoryzowana do wykonania) wtedy i tylko wtedy, gdy'userId'
i'customerId'
są oceniane jako równe !.
Aby osiągnąć ograniczenie, chcę rozważyć dwa sposoby
przez wstrzyknięcie'userId'
i'customerId'
wartości z pliku xml (przykład.xml) do wyrażenia 1 poniżej. Wyrażenia użyte w tym są sugerowane przez Roba Wincha (Dziękuję Rob!). Jednak Spring nie mógł ocenić wyrażenia.
przez wstrzyknięcie'userId'
i'customerId'
wartości z pliku właściwości zewnętrznych (example.properties) do wyrażenia 2 poniżej. Podobnie wiosna nie mogła ocenić tego wyrażenia.
@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;
}
}
Moje pytania:
Q1. Jakie są właściwe wyrażenia, które muszę umieścić w@PreAuthorize
adnotacja do wprowadzania wartości z pliku xml (przykład.xml) lub z pliku właściwości (example.properties) do pliku@PreAuthorize(...)
wyrażenie, to może być łatwo ocenione?
Q2. Wskaż mi, czy popełniłem błędy inne niż wyrażenia.
Q3. Jest to dla mnie pytanie o wartości 1 000 000,00 $, ponieważ mam już dość piekła, aby rozwiązać ten problem !!!. Więc pomóż mi jak możesz!