我正在寻找一种在运行时(例如,通过属性文件或部署描述符)配置基于泽西岛的应用程序中哪些服务是可用的,这样管理员就可以在容器级别启用或禁用服务。
我们的应用程序目前公开了15个不同的端点。它有一个带有@ApplicationPath注解的应用程序,其中有3个类注释了@Path,在这3个类中有15个不同的方法,它们通常使用@Path/@/@Produces进行注释。我的应用程序有几种不同的技术来读取其运行时配置,例如连接到数据库资源的设置,查看属性文件中的更改等。我想要做的是添加一些配置值,以便管理员能够在泽西级启用/禁用这些类中的3个类或任意一个端点。有人能建议最好的方法吗?更进一步,我们希望在运行时控制这个配置,因此如果配置发生变化,我们可以更新jersey配置以启用/禁用更改后的服务,而不必重新启动容器(在本例中是Tomcat )。任何建议都要感谢!谢谢!
发布于 2017-04-25 19:01:29
我不知道在泽西岛是否可以这样做,但我能想到的一件事是使用泽西预匹配过滤器来确定端点是否被禁用。您可以使用也可以充当侦听器的服务,并相应地更新禁用的端点。如果端点被禁用,那么只返回404。
@Provider
@PreMatching
public class DisabledEndpointsFilter implements ContainerRequestFilter {
@Inject
private ConfigurationService configuration;
@Override
public void filter(ContainerRequestContext request) throws IOException {
final List<String> disabledEndpoints = this.configuration.getDisabledEndpoints();
final String path = stripLeadingSlash(request.getUriInfo().getPath());
for (String endpoint: disabledEndpoints) {
endpoint = stripLeadingSlash(endpoint);
if (path.startsWith(endpoint)) {
request.abortWith(Response.status(404).build());
return;
}
}
}
}我在玩这个,还安排了一个工作的战俘。您可以查看Github回购。
发布于 2017-04-25 18:15:15
为此,我建议使用apache camel。使用camel,您可以将http请求与嵌入式jetty服务器作为代理进行控制。
http://camel.apache.org/jetty.html
https://stackoverflow.com/questions/43614223
复制相似问题