没有web.xml的情况下如何应用ContainerRequestFilter?

时间:2019-12-02 20:26:09

标签: java rest jersey jetty servlet-filters

我目前正在使用jersey 2.27和jetty 9.4制作RESTapi。 在此服务器上,我尝试应用过滤器:

@AuthenticationEndpoint.Secured
@Provider
@Priority(Priorities.AUTHENTICATION)
public class AuthenticationFilter implements ContainerRequestFilter {

    private static final String REALM = "example";
    private static final String AUTHENTICATION_SCHEME = "Bearer";

    @Override
    public void filter(ContainerRequestContext requestContext) throws IOException {

        //Authentication code
    }

    private boolean isTokenBasedAuthentication(String authorizationHeader) {

    }

    private void abortWithUnauthorized(ContainerRequestContext requestContext) {


    }

    private void validateToken(String token) throws Exception {

    }
}

但是,不会触发此过滤器。

这是我的终点

@Path("/authenticate")
public class AuthenticationEndpoint {

    Machine machine = Machine.getInstance();

    @NameBinding
    @Retention(RUNTIME)
    @Target({TYPE, METHOD})
    public @interface Secured { }



    @POST
    @Path("/authenticate")
    @Secured
    @Consumes(MediaType.APPLICATION_JSON)
    @Produces(MediaType.APPLICATION_JSON)
    public Response authenticateUser(
            AuthenticationRequest authenticationRequest){

    }

我没有web.xml,也不知道如何实际触发此过滤器。有人对此有何建议?我很难理解此服务器筛选器配置。 PS:由于我认为方法太混乱了,所以省略了方法的内容,如果有必要,我当然会添加它。

1 个答案:

答案 0 :(得分:0)

创建应用程序时必须注册过滤器,例如

public class MyApplication extends ResourceConfig {
  register(AuthenticationFilter.class)
  // yada yada
}