首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >需要Jersey2技术在运行时启用或禁用服务

需要Jersey2技术在运行时启用或禁用服务
EN

Stack Overflow用户
提问于 2017-04-25 14:56:35
回答 2查看 600关注 0票数 0

我正在寻找一种在运行时(例如,通过属性文件或部署描述符)配置基于泽西岛的应用程序中哪些服务是可用的,这样管理员就可以在容器级别启用或禁用服务。

我们的应用程序目前公开了15个不同的端点。它有一个带有@ApplicationPath注解的应用程序,其中有3个类注释了@Path,在这3个类中有15个不同的方法,它们通常使用@Path/@/@Produces进行注释。我的应用程序有几种不同的技术来读取其运行时配置,例如连接到数据库资源的设置,查看属性文件中的更改等。我想要做的是添加一些配置值,以便管理员能够在泽西级启用/禁用这些类中的3个类或任意一个端点。有人能建议最好的方法吗?更进一步,我们希望在运行时控制这个配置,因此如果配置发生变化,我们可以更新jersey配置以启用/禁用更改后的服务,而不必重新启动容器(在本例中是Tomcat )。任何建议都要感谢!谢谢!

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-04-25 19:01:29

我不知道在泽西岛是否可以这样做,但我能想到的一件事是使用泽西预匹配过滤器来确定端点是否被禁用。您可以使用也可以充当侦听器的服务,并相应地更新禁用的端点。如果端点被禁用,那么只返回404。

代码语言:javascript
复制
@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回购

票数 2
EN

Stack Overflow用户

发布于 2017-04-25 18:15:15

为此,我建议使用apache camel。使用camel,您可以将http请求与嵌入式jetty服务器作为代理进行控制。

http://camel.apache.org/jetty.html

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43614223

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档