Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/331.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
将属性文件或xml文件中的属性值注入预授权(…)java注释(未解析)_Java_Spring_Spring Security_Spring Annotations_Spring El - Fatal编程技术网

将属性文件或xml文件中的属性值注入预授权(…)java注释(未解析)

将属性文件或xml文件中的属性值注入预授权(…)java注释(未解析),java,spring,spring-security,spring-annotations,spring-el,Java,Spring,Spring Security,Spring Annotations,Spring El,我在之前的帖子中问过这个问题:。但这还没有解决。我想将xml配置或外部文件中的值注入到@PreAuthorize(…)注释中。它不像使用@Value注释进行注入那样容易 为了回顾这个问题,我提供了以下信息 我有以下xml配置文件(example.xml),它 具有属性并初始化其相应的值 我有以下外部属性文件 (例如.properties)位于/WEB-INF文件夹中。此文件是一个 上述XML配置文件的备选方案 user.id = 33 customer.id =33 我的applicat

我在之前的帖子中问过这个问题:。但这还没有解决。我想将xml配置或外部文件中的值注入到
@PreAuthorize(…)
注释中。它不像使用
@Value
注释进行注入那样容易

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

  • 我有以下xml配置文件(example.xml),它 具有属性并初始化其相应的值

    
    
  • 我有以下外部属性文件 (例如.properties)位于/WEB-INF文件夹中。此文件是一个 上述XML配置文件的备选方案

    user.id = 33
    customer.id =33
    
  • 我的applicationContext.xml文件中有属性策略持有者配置

    
    
  • 我有两个模型类:
    User
    Customer

    公共类用户{
    私有int用户id;
    public int getUserId(){
    返回用户标识;
    }
    }
    公共类客户{
    私人int客户ID;
    public int getCustomerId(){
    返回客户ID;
    }
    }
    
  • 我想限制另一个服务/控制器类 使用
    @PreAuthorize
    注释执行
    'edit'
    方法

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

    为了实现这一限制,我想考虑两种方式:

  • 通过将xml文件(example.xml)中的
    'userId'
    'customerId'
    值注入下面的表达式1。我在英语中使用的表达方式 这是Rob Winch建议的(谢谢Rob!)。然而,春天 无法计算表达式的值

  • 通过将外部属性文件(example.properties)中的
    'userId'
    'customerId'
    值注入表达式2中 在下面类似地,spring也不能计算这个表达式

    @服务(“..”)或@Controller
    公共类MyMainClass{
    //表达式1
    @预授权(“@userBean.userId==@customerBean.customerId”)
    公共布尔编辑(用户用户、客户客户){
    返回true;
    }
    //表达式2
    ////我也尝试过其他方法,但最终也有类似的例外
    @预授权(${user.id}=${customer.id}”)
    公共布尔编辑(用户、客户){
    返回true;
    }
    }
    
  • 我的问题是:

    问题1。为了将xml文件(example.xml)或属性文件(example.properties)中的值注入到
    @PreAuthorize(…)
    表达式中,我必须在
    @PreAuthorize
    注释中放入哪些正确的表达式,然后才能轻松地对其进行计算

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


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

    如果您正在使用属性文件,并且希望在控制器类中访问它们,则必须在servlet上下文xml文件中添加
    ,然后可以使用@Value注释来获取该属性的值。例如
    my.properties
    文件包含
    some.userid=33
    ,因此您可以使用以下方法访问此属性:

    @Value("${some.userid}")
    private int someId;
    
    但为了确保测试的目的,我会将IgnoreUnsolvablePlaceholders设置为false,如果它无法解析属性文件,我会知道错误的来源


    希望有帮助。

    您的第二个表达式只在
    @Value
    注释中起作用,因为这些注释指的是占位符,而不是表达式。你能发布/添加完整的stacktrace吗。