我需要使用Spring表达式语言评估基于bean的动态用户生成的表达式,但是我希望限制它们可以通过注释使用的字段。例如,如果我具有下面的类,我希望能够评估表达式field1 + field2
,但是如果我尝试评估field1 + field3
,则将导致生成异常。
这可能吗?有没有其他方法可以限制表达式的范围?
public class Foo {
@AllowedField
private int field1;
@AllowedField
private int field2;
private int field3;
}
答案 0 :(得分:2)
基本上,这是您需要做的
扩展set.seed(123)
n <- 30
m <- 9
mat <- matrix(
sample(-1:1, n * m, replace = TRUE),
nrow = n,
dimnames = list(1:n, paste("Gene", LETTERS[1:m], sep = "_"))
)
foo <- mat[, order(colSums(abs(mat)))]
bar <- foo[order(rowSums(abs(foo))), ]
head(bar)
以返回自己的 Gene_F Gene_D Gene_I Gene_G Gene_C Gene_A Gene_H Gene_B Gene_E
18 -1 0 0 0 0 -1 0 0 1
15 0 0 0 1 0 -1 -1 -1 0
27 0 0 0 0 1 0 -1 -1 -1
1 1 -1 0 1 0 -1 0 1 0
3 0 0 -1 1 0 0 -1 1 -1
6 0 -1 1 0 0 -1 1 0 1
:
StandardEvaluationContext
扩展PropertyAccessor
并实现自己的public class SecureEvaluationContext extends StandardEvaluationContext {
@Override
public List<PropertyAccessor> getPropertyAccessors() {
return Arrays.asList(new SecurePropertyAccessor());
}
}
:
ReflectivePropertyAccessor
评估:
canRead