参考属性我有服务接口@PreAuthorize:在实施
public interface CompoundService<T extends Compound> {
T getById(final Long id);
//...
}
和抽象实现
public abstract class CompoundServiceImpl<T extends Compound>
implements CompoundService<T> {
//...
private Class<T> compoundClass;
//...
}
的Compound
每个实现需要它的延伸CompoundService
和它自己的服务类自己的服务接口,延伸CompoundServiceImpl
。
我现在想在CompoundService
的我的方法中添加基本安全uisng注释。据我了解,我必须将它们添加到接口中而不是实际的实现中。由于用户可以针对Compound
的不同实现具有不同的角色,因此我必须考虑到这一点。在@PreAuthorize
的含义我想获得Compound
实现的名称,例如。 compoundClass.getSimpleName()
。所以,我得到这样的:
public interface CompoundService<T extends Compound> {
@PreAuthorize("hasRole('read_' + #root.this.compoundClass.getSimpleName())")
T getById(final Long id);
//...
}
这基本上就是在这里提到:
https://jira.springsource.org/browse/SEC-1640
但没有例子,我并没有真正得到解决。那么我应该使用this
?或如上#root.this
?
我的第二个问题是,因为这是一个将由代理实现的接口(从spring开始),预期this.compoundClass
实际上是否正确评估?
最后但并非最不重要的我怎么能实际测试呢?*
* 我不是真正创建一个完成的应用程序,但一些配置,像的具体类型的数据库搜索的框架。这意味着大多数授权和认证都必须来自实施者。