当前位置: 首页 > 知识库问答 >
问题:

从属性文件或xml文件注入属性值到PreAuthorize(...)java注释(未解决)

康赞
2023-03-14

我在上一篇文章中问过这个问题:Spring Security的SpEL:将值从XML传递到基于Java的SpEL配置。但这还没有解决。我想将xml配置或外部文件中的值注入@PreAuthorize(…) 注释。它不像使用@Value注释进行注入那样容易。

为了回顾这个问题,我提供了以下信息。

>

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

我有两个模型类:UserCustomer

public class User {
    private int userId;

public int getUserId() {
        return userId;
    }
}

public class Customer {
    private int customerId;

    public int getCustomerId(){
        return customerId;
    }
}

我有另一个服务/控制器类,我想通过使用@PreAuthorize注释来限制'edit'方法。

限制:当且仅当'userId''customerId'的计算结果相等时,才允许(授权执行)该方法!。

为了达到限制,我想考虑两种方式。

>

  • 通过将xml文件(example.xml)中的'userId''CusterId'值注入下面的表达式1。我在这篇文章中使用的表达是由罗伯·温奇建议的(谢谢罗伯!)。然而,Spring无法评估这个表达。

    通过将外部属性文件(example.properties)中的'userId''CusterId'值注入下面的表达式2。同样,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;
        }
    }
    

    我的问题是:

    问题1。要将xml文件(example.xml)或属性文件(example.properties)中的值注入@PreAuthorize(…)中,我必须在@PreAuthorize注释中放入哪些正确的表达式 表达式,那么它是否可以轻松计算?

    问题2。如果我犯了表达以外的错误,请告诉我。

    第三季度。这对我来说就像是一个价值1000000.00美元的问题,因为我已经厌倦了解决这个问题!!!。所以请尽你所能帮助我!。


  • 共有1个答案

    戚俊健
    2023-03-14

    如果您正在使用属性文件,并且希望在控制器类中访问它们,则必须添加

    @Value("${some.userid}")
    private int someId;
    

    但为了确保测试的目的,我会设置为false,如果它不能解决属性文件,我会知道错误来自哪里...

    希望能有所帮助。

     类似资料:
    • 我有以下课程: 我从控制器调用方法test(): 然而,spring并没有注入构建。版本值,即使类具有组件注释。 我在控制器中使用相同的属性,它工作正常。 我做错了什么?

    • 问题内容: 有点卡在这里。我有一个带有3个配置文件的pom。Theese配置文件具有不同的版本名称。我要在构建特定配置文件时将该版本名称注入属性文件。 我的个人资料: 和filter.properties看起来像这样: 怎么做?我通过命令构建项目: 问题答案: 您需要做的是在POM文件的部分中添加一个新部分。 像这样: 这将在指定文件的指定文件夹()内部查找,并在遇到定义的变量时更改文件。 因此,

    • 例如,我有一个bean类 我想设置这个属性的值。 在Xml配置中,我可以 我如何实现同样的事情,即设置属性的值使用Java注释?现在我已经读到,我们可以使用@Value注释使用一些属性文件,但它不能不使用属性文件,做的方式,我通过xml文件?或者使用属性文件是必要的? 我可以通过包含

    • 我是Spring Security的新手。我看过很多关于如何通过外部属性文件的注释注入值的文章。我尝试了很多方法,但最终都是用java。lang.IllegalArgumentException:无法解析占位符“val.id”异常。 你能给我一些提示如何处理这个例外吗? 我的java类如下所示: 我的属性文件名为val.properties,位于WEB-INF下,其内容为val.id=xyz 我将

    • 我试图向自定义注释中注入一个值,但Spring似乎没有进行评估。

    • 我在数据库中具有与数据库连接相关的属性。xml文件。我想在一个表中使用相同的值。属性文件。是否可以从中获取值。xml文件,并设置为。财产? --谢谢 使用loadFromXML时发生异常 线程“main”java中出现异常。util。InvalidPropertiesFormatException:组织。xml。萨克斯。SAXException:无效的系统标识符:http://www.hibern