我在之前的帖子中问过这个问题:SpEL for spring security: Passing Values from XML to Java based SpEL configuration。但还没有解决。我想将 xml 配置或外部文件中的值注入@PreAuthorize(...)
注释。@Value
使用注解注入并不容易。
为了回想这个问题,我提供以下信息。
我有以下具有属性并初始化其相应值的 xml 配置文件 (example.xml)。
<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>
我在 /WEB-INF 文件夹中有以下外部属性文件(example.properties)。该文件是上述 XML 配置文件的替代文件。
user.id = 33 customer.id =33
我的 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" />
我有两个模型类:
User
和Customer
public class User { private int userId; public int getUserId() { return userId; } } public class Customer { private int customerId; public int getCustomerId(){ return customerId; } }
我有另一个服务/控制器类,我想
'edit'
通过使用@PreAuthorize
注释来限制方法。The restriction
'userId'
: 当且仅当和'customerId'
被评估为相等时,该方法才被允许(被授权执行) 。为了实现限制,我想考虑两种方式
通过将xml 文件(example.xml)中的值
'userId'
和值注入下面的表达式 1。'customerId'
我在本文中使用的表达方式是由 Rob Winch 建议的(谢谢 Rob!)。但是,Spring 无法评估表达式。通过将外部属性文件(example.properties)中的
'userId'
和值注入下面的表达式 2。'customerId'
同样,spring 也无法评估这个表达式。@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; } }
我的问题:
Q1。我必须在注释中放入哪些正确的表达式才能@PreAuthorize
将 xml 文件 (example.xml) 或属性文件 (example.properties) 中的值注入到@PreAuthorize(...)
表达式中,然后才能轻松评估它?
Q2。如果我在表达之外犯了错误,请指出我。
Q3。对我来说,这就像一个 1,000,000.00 美元的问题,因为我厌倦了解决这个问题!!!。所以请尽可能地帮助我!