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

时间:2017-04-25 14:56:35

标签: java jersey jax-rs

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

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

2 个答案:

答案 0 :(得分:2)

我不知道这是否可以在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

答案 1 :(得分:0)

我建议使用apache camel。使用camel,您可以将http请求与嵌入式jetty服务器结合起来作为代理。

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