jcsabin FilteredAdapter 逻辑处理问题
jcasbin 默认的Enforcer 构造函数在处理FilteredAdapter的时候有些问题(造成的问题是运行正常,但是过程有问题)
原有参考代码
public Enforcer(Model m, Adapter adapter) {
this.adapter = adapter;
this.watcher = null;
model = m;
model.printModel();
fm = FunctionMap.loadFunctionMap();
initialize();
// 此处有问题
if (this.adapter != null ) {
loadPolicy();
}
}
现象
就是只要是传递了adapter 就会执行加载,问题就很明显了,违背了filter 的意义了
解决方法
实际上官方提供了一个filteradapter 的处理,只是没有使用
public Enforcer(Model m, Adapter adapter) {
this.adapter = adapter;
this.watcher = null;
model = m;
model.printModel();
fm = FunctionMap.loadFunctionMap();
initialize();
// fix: Enforcer pass FilteredAdapter will load all policy
if (this.adapter != null && !isFiltered()) {
loadPolicy();
}
}
说明
相关的pr 已经合并了,并且在1.10.2 已经发布了,对于使jcasbin filteradapter的比较推荐使用此maven 包
参考资料
https://github.com/casbin/jcasbin/pull/197
https://github.com/casbin/jcasbin/releases/tag/v1.10.2