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!

questionAnswers(1)

yourAnswerToTheQuestion