gpt4 book ai didi

rest - Jersey 的多个 ContainerRequestFilter

转载 作者:行者123 更新时间:2023-12-04 07:23:12 25 4
gpt4 key购买 nike

我们计划为我们的 REST API 使用 Jersey 的引用实现。作为原型(prototype)工作,我也在使用 ContainerRequestFilters 并实现了其中的多个。有没有一种方法可以控制这些过滤器的执行顺序?

我在这里考虑的场景是确保安全过滤器必须是第一个运行的过滤器,如果需要,建立 SecurityContext 然后执行其他过滤器。

最佳答案

是的,您可以使用 javax.annotation.Priority 来控制它。属性和默认 javax.ws.rs.Priorities .例如,如果您想要:

  • 日志过滤器总是首先运行
  • 身份验证过滤器应在下一个运行
  • 授权过滤器接下来应该运行
  • 自定义过滤器应始终在其他过滤器之后运行

  • 你可以这样做:
    @Priority(Integer.MIN_VALUE)
    public class CustomLoggingFilter implements ContainerRequestFilter
    {
    @Override
    public void filter(ContainerRequestContext requestContext) throws IOException
    {
    // DO LOGGING HERE, THIS RUNS FIRST
    }
    }

    @Priority(Priorities.AUTHENTICATION)
    public class AuthenticationFilter implements ContainerRequestFilter
    {
    @Override
    public void filter(ContainerRequestContext requestContext) throws IOException
    {
    String authHeader = requestContext.getHeaderString(HttpHeaders.WWW_AUTHENTICATE);

    // DO AUTHENTICATION HERE, THIS RUNS SECOND
    }
    }

    @Priority(Priorities.AUTHORIZATION)
    public class AuthorizationFilter implements ContainerRequestFilter
    {
    @Override
    public void filter(ContainerRequestContext requestContext) throws IOException
    {
    String authHeader = requestContext.getHeaderString(HttpHeaders.AUTHORIZATION);

    // DO AUTHORIZATION HERE, THIS RUNS THIRD
    }
    }

    @Priority(Priorities.USER)
    public class MyAwesomeStuffFilter implements ContainerRequestFilter
    {
    @Override
    public void filter(ContainerRequestContext requestContext) throws IOException
    {
    // DO AWESOME STUFF HERE, THIS RUNS LAST
    }
    }

    关于rest - Jersey 的多个 ContainerRequestFilter,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20555744/

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