所以我正在编写一个Web服务架构,其中包括FunctionProvider
类,这些类执行请求的实际处理,以及一个接收请求并将其委托给正确FunctionProvider
的主Endpoint
类。
我不知道运行时可用的FunctionProvider
,所以我需要能够向我的主Endpoint
类"注册"它们(如果这是正确的词),并查询它们以查看它们是否与传入的请求匹配。
public class MyFunc implements FunctionProvider{
static {
MyEndpoint.register(MyFunc);
}
public Boolean matchesRequest(Request req){...}
public void processRequest(Request req){...}
}
public class MyEndpoint{
private static ArrayList<FunctionProvider> functions = new ArrayList<FunctionProvider>();
public void register(Class clz){
functions.add(clz);
}
public void doPost(Request request){
//find the FunctionProvider in functions
//matching the request
}
}
我真的没有做过太多像这样的反思性Java(上面可能是错误的,但希望能证明我的意图)。
在不被黑客攻击的情况下实现这一点的最佳方法是什么?
- 不要让函数提供程序自行注册。通过某些应用程序初始化引导端点。使用函数提供程序列表进行调用。这样您就可以配置优先级(如果两个提供商都声称他们可以处理请求怎么办?你现在设置它的方式,你需要以某种方式调用类来触发静态构造函数,太间接了。
- 如果检测函数提供程序是否支持给定请求是微不足道的,请考虑将其作为配置的一部分。如果这在请求中,则将其映射到该函数提供程序。这样可以更好地分离关注点。如果检测很复杂,请考虑在与函数提供程序不同的类中进行检测。
- 通过配置委托/函数指针,您可以完全避免需要函数提供程序(不确定 Java 是否/如何支持委托)。