我正在尝试如何将访问控制代码集成到我的项目中。我的想法是创建无访问控制的对象,专注于只做业务逻辑,然后在编译时用拦截公共方法调用的装饰器对象包装这些对象,执行通用访问控制检查,然后抛出授权异常或者调用基本方法。
因此,假设我有多个业务对象,如下所示:
public class Interactor
{
public void Interact1()
{
// Do stuff
}
public void Interact2()
{
// Do stuff
}
// etc ...
}
不是为包含相同代码的每个类单独编写一个包装器,而是一遍又一遍:
public class RestrictedInteractor extends Interactor
{
public void Interact1()
{
if (/* not authorized Interactor.Interact1 */)
throw new AuthorizationException();
super.Interact1();
}
public void Interact2()
{
if (/* not authorized for Interactor.Interact2 */)
throw new AuthorizationException();
super.Interact2();
}
// etc ...
}
这将是许多重复的样板代码。
我想编写一个可以执行此类操作的泛型类(尽管此代码只是乱码):
public class RestrictedClass<T> extends T
{
public void Intercept(Method method)
{
if (/* not authorized T.method */)
throw new AuthorizationException();
super.method();
}
}
然后我可以在任何需要的地方创建它的实例:
Foo foo = new Restricted<Foo>();
Bar bar = new Restricted<Bar>();
// etc
我无法使用Java动态代理,因为这些类需要具体,而不是接口。
那么,这甚至可能吗?如果是这样,我该怎么做呢?
答案 0 :(得分:0)