gpt4 book ai didi

java - 用于 Spring 安全的 SpEL : Passing Values from XML to Java based SpEL configuration

转载 作者:行者123 更新时间:2023-11-30 04:10:54 24 4
gpt4 key购买 nike

我想将 xml 文件中分配的属性值传递给 Java 中的 Spring 表达式(SpEL)。你能指出我如何实现这一目标吗?为了清楚起见,我提供了以下示例。

example.xml 文件:

<beans>
<bean id="user" class="x.y.User">
<property name="name" value="A"/>
<property name="userId" value="33"/>

<bean id="customer" class="x.y.Customer">
<property name="name" value="B"/>
<property name="customerId" value="33"/>
</bean>
</beans>

请记住,我有“用户”和“客户”模型类。

我想通过以下方式使用 Pre-Authorize 注释和 Spring 表达式来保护名为“edit”的方法。

@PreAuthorize("(#user.userId == #customer.customerId)")    
public Boolean edit(User user, Customer custmer) {
return true;
}

问题是,如何将 userId 和 customerId 的值从“example.xml 文件”传递到上述表达式以比较这两个值,然后确保“edit”方法的安全?

注意:我不想使用权限评估器。请指出我是否可以在不考虑权限评估器的情况下做到这一点。非常感谢您的支持与合作!

最佳答案

您可以引用beans references in SpEL expressions使用@

我对您的示例进行了一些更改,以便更明显地看出 SpEL 表达式的哪一部分引用了 beans,哪一部分引用了方法参数。给定以下配置:

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

仅当 User 参数的 userId33 时才允许使用此方法(这是 userBean 的值) s userId 属性)。

@PreAuthorize("#user.userId == @userBean.userId")    
public Boolean edit(User user, Customer custmer) {
return true;
}

同样,您可以使用以下内容引用 id 为 customerBean 的客户(如我的示例 XML 中所定义):

@PreAuthorize("#custmer.userId == @customerBean.userId")    
public Boolean edit(User user, Customer custmer) {
return true;
}

如果您希望它对当前的 XML 配置执行相同的操作,您可以使用以下命令。这里的要点是 @ 后面的值应该与 bean 的名称匹配。

@PreAuthorize("#user.userId == @user.userId")    
public Boolean edit(User user, Customer custmer) {
return true;
}

关于java - 用于 Spring 安全的 SpEL : Passing Values from XML to Java based SpEL configuration,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19625465/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com