我想将xml文件中指定的属性值传递给Java中的Spring表达式(SpEL)。你能告诉我如何做到这一点吗?为了清楚起见,我提供了以下示例。
实例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>
请记住,我有“用户”和“客户”模型类。
我想通过以下方式使用预授权注释和Spring表达式来保护名为“edit”的方法。
@PreAuthorize("(#user.userId == #customer.customerId)")
public Boolean edit(User user, Customer custmer) {
return true;
}
问题是,如何将userId和CusterId的值从“example.xml文件传递到上面的表达式来比较这两个值,然后保护“编辑”方法?
注意:我不想使用权限计算器。请告诉我是否可以在不考虑许可评估者的情况下执行此操作。我们将非常感谢您的支持与合作!。
为什么将用户和客户声明为Springbean?
@罗布,这不管用如果userBean的userId和customerBean的customerId相等,则允许使用edit方法。根据您的建议,应按以下方式书写:
@PreAuthorize("@userBean.userId == @customerBean.customerId")
public Boolean edit(User user, Customer custmer) {
return true;
}
但它返回以下错误:
java.lang.IllegalArgumentException: Failed to evaluate expression '(@userBean.userId == @customerBean.customerId)'
有什么建议吗?
更新。将@userBean.userId更改为@user.userId,将@CusterBean.customerId更改为@customer.customerId
您可以使用@
在SpEL表达式中引用bean引用。
我对您的示例做了一点修改,以使SpEL表达式的哪一部分引用bean,哪一部分引用方法参数更加明显。给定以下配置:
<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
参数的userId
为33
(这是userBean
suserId
属性的值)时,才允许使用此方法。
@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;
}
我正在使用TestNG执行单元测试,其中我正在使用xml文件中定义的测试用例测试我的代码。 我正在使用xml文件中定义的测试用例执行登录操作。但问题是我想在方法登录中以usersname和password的形式发送参数。 是否可以将值(用户名和密码)传递给执行测试用例的xml文件中的登录方法? 下面是我的XML文件 谢谢
在Spring security 2.0.4中,声明如下所示,过滤器的位置也在各个bean声明中声明..... 旧的security.xml Spring Security:如何排除某些资源? https://www.baeldung.com/security-none-filters-non-access-permitall null
问题内容: 我尝试不使用任何xml。 像这样一个:转换为@Bean 问题在这里。 尝试将“ com.cloudlb.domain.User”转换为Class []无效。 错误:投放问题。 先感谢您。 问题答案:
我试图使用Spring的表达式语言(SpEL)将属性从我的文件传递到SpEL方法调用中。 我在一个Spring Boot和Spring Security环境中,我正试图在注释中这样做。我能够调用方法,而不会出现如下问题: 这工作罚款。它验证用户具有授权令牌。但是,我希望将此值外部化为配置属性。这不起作用: 我也试过了 和 那么,如何使用SpEL将应用程序属性作为SpEL方法参数传递?这可能吗?
我是Spring的新手,尝试将基于xml的配置转换为注释basic。我读了这个教程。它与基于xml的配置完美结合。MVCSpring积垢教程 现在我将所有基于xml的配置转换为注释,但我有一个问题。我几乎把我读到的东西都读了一遍,但我没有解决这个问题。 组织。springframework。豆。工厂BeanCreationException:创建名为“personController”的bean时
Spring引导2.3.4,Spring安全,固定REST控制器(endpoint)。