首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Spring表达式语言(Spring Expression Language,SPEL)使用给定的注释限制对bean字段的访问

Spring表达式语言(Spring Expression Language,SPEL)使用给定的注释限制对bean字段的访问
EN

Stack Overflow用户
提问于 2018-08-08 09:44:54
回答 1查看 616关注 0票数 2

我需要使用Spring表达式语言计算基于bean的动态用户生成的表达式,但我希望通过注释限制它们可以使用的字段。例如,如果我有下面的类,我希望能够计算表达式field1 + field2,但是如果我尝试计算field1 + field3,这将导致生成异常。

这个是可能的吗?有没有不同的方法来限制表达式的范围?

代码语言:javascript
复制
public class Foo {

    @AllowedField
    private int field1;

    @AllowedField
    private int field2;

    private int field3;
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-08-23 04:58:37

基本上,这就是你需要做的

扩展StandardEvaluationContext以返回您自己的PropertyAccessor

代码语言:javascript
复制
public class SecureEvaluationContext extends StandardEvaluationContext {
    @Override
    public List<PropertyAccessor> getPropertyAccessors() {
        return Arrays.asList(new SecurePropertyAccessor());
    }
}

扩展ReflectivePropertyAccessor并实现您自己的canRead

代码语言:javascript
复制
public class SecurePropertyAccessor extends ReflectivePropertyAccessor {

    @Override
    public  boolean canRead(EvaluationContext context, Object target, String name) {
        boolean canRead = // Add your own logic as needed
        return canRead;
    }
}

通过以下方式评估:

代码语言:javascript
复制
    Expression expression = parser.parseExpression("field1 + field2");
    EvaluationContext evaluationContext = new SecureEvaluationContext();
    Double value = expression.getValue(evaluationContext, new ControlElement(), Double.class);
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51737529

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档