Inyectar valores de propiedad de un archivo de propiedades o un archivo xml en la anotación java de PreAuthorize (…) (Sin resolver)

He hecho esta pregunta en mi post anterior aquí:SpEL para seguridad Spring: Pasando valores de XML a la configuración SpEL basada en Java. Pero aún no estaba resuelto. Quiero inyectar valores desde una configuración xml o desde un archivo externo en@PreAuthorize(...) anotación. No es fácil como inyectar utilizando@Value anotación.

Para recordar la pregunta, proporciono la siguiente información.

Tengo el siguiente archivo de configuración xml (example.xml) que tiene propiedades e inicializó sus valores correspondientes.

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

Tengo el siguiente archivo de propiedades externas (example.properties) dentro de la carpeta / WEB-INF. Este archivo es una alternativa para el archivo de configuración XML mencionado anteriormente.

user.id = 33
customer.id =33

Tengo la configuración del titular de la política de propiedad en mi archivo 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" />

Tengo dos clases modelo:User yCustomer

public class User {
    private int userId;

public int getUserId() {
        return userId;
    }
}

public class Customer {
    private int customerId;

    public int getCustomerId(){
        return customerId;
    }
}

Tengo otra clase de servicio / controlador que quiero restringir'edit' método utilizando@PreAuthorize anotación.

The restriction: El método está permitido (autorizado para ser ejecutado) si y solo si'userId' y'customerId' Se evalúan igual !.

Para lograr la restricción, quiero considerar dos maneras

inyectando'userId' y'customerId' los valores del archivo xml (example.xml) en la expresión 1 a continuación. Las expresiones que utilicé en esto son sugeridas por Rob Winch (¡Gracias Rob!). Sin embargo, Spring no pudo evaluar la expresión.

inyectando'userId' y'customerId' los valores del archivo de propiedades externo (example.properties) en la expresión 2 a continuación. Del mismo modo, la primavera no pudo evaluar esta expresión también.

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

Mis preguntas:

Q1. ¿Cuáles son las expresiones correctas que debo poner dentro de la@PreAuthorize anotación para inyectar valores del archivo xml (example.xml) o del archivo de propiedades (example.properties) en el@PreAuthorize(...) expresión, entonces puede ser fácilmente evaluado?

Q2. Indíqueme si cometí errores distintos a las expresiones.

Q3. Es como una pregunta de $ 1,000,000.00 para mí, ya que estoy harto de resolver este problema. Así que por favor ayúdame tanto como puedas!

Respuestas a la pregunta(1)

Su respuesta a la pregunta