gpt4 book ai didi

java - 需要 Jersey2 技术来在运行时启用或禁用服务

转载 作者:行者123 更新时间:2023-12-02 02:52:17 25 4
gpt4 key购买 nike

我正在寻找一种在运行时配置的方法(例如,通过属性文件或部署描述符)基于 Jersey 的应用程序中的哪些服务可用,即,以便管理员可以在容器级别。

我们的应用程序目前公开 15 个不同的端点。它有 1 个用 @ApplicationPath 注释的应用程序,以及 3 个用 @Path 注释的类,这 3 个类中有 15 个用通常的 @Path/@/@Produces 注释的不同方法。我的应用程序有几种不同的技术来读取其运行时配置,例如连接到数据库资源的设置、监视属性文件的更改等。我想要做的是添加一些配置值,以便管理员可以在 Jersey 级别启用/禁用 3 个类或这些类中的任何单个端点。有人可以建议最好的方法吗?更进一步,我们希望在运行时控制此配置,因此如果配置发生变化,我们可以更新 Jersey 配置以启用/禁用更改的服务,而无需重新启动容器(在本例中为 Tomcat)。任何建议表示赞赏!谢谢!

最佳答案

我不知道 Jersey 本身是否可以实现这一点,但我能想到的一件事是仅使用 Jersey 预匹配过滤器来确定端点是否被禁用。您可以使用也可以充当监听器的服务并相应地更新禁用的端点。如果端点被禁用,则仅返回 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;
}
}
}
}

我正在研究这个并整理了一个工作 POC。您可以查看Github Repo .

关于java - 需要 Jersey2 技术来在运行时启用或禁用服务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43614223/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com