我正在试验如何将访问控制代码集成到我的项目中。我的想法是创建专注于只执行业务逻辑的无访问控制对象,然后在编译时用截获公共方法调用的装饰器对象包装这些对象,执行通用访问控制检查,然后抛出授权异常或调用基方法。
因此,假设我有多个业务对象,如下所示:
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动态代理,因为这些类需要是具体的,而不是接口。
那么,这有可能吗?如果是这样的话,我该怎么做呢?
发布于 2021-02-04 17:58:35
https://stackoverflow.com/questions/32528728
复制相似问题