Java DropWizard中的名称绑定(Jersey)

Java DropWizard中的名称绑定(Jersey),java,rest,jersey,dropwizard,Java,Rest,Jersey,Dropwizard,我想通过JWT使用Jersey for Auth的NameBinding创建自定义注释,我在另一个普通java项目中使用了这项技术,一切都很完美,但它在DropWizard项目中不起作用。据我所知,DW也使用球衣休息。这是我的测试代码,但不起作用 界面: @NameBinding @Retention(RUNTIME) @Target({TYPE, METHOD}) public @interface Auth {} @Auth @Provider public class AuthFilte

我想通过JWT使用Jersey for Auth的NameBinding创建自定义注释,我在另一个普通java项目中使用了这项技术,一切都很完美,但它在DropWizard项目中不起作用。据我所知,DW也使用球衣休息。这是我的测试代码,但不起作用

界面:

@NameBinding
@Retention(RUNTIME)
@Target({TYPE, METHOD})
public @interface Auth {}
@Auth
@Provider
public class AuthFilter implements ContainerRequestFilter {

    private static final String SECRET = "SOME_SECRET_STRING";

    @Override
    public void filter(ContainerRequestContext requestContext) throws IOException {
        try {
            String userToken = requestContext.getHeaderString("token");
            Claims body = Jwts.parser().setSigningKey(SECRET).parseClaimsJws(userToken).getBody();
            if(body.getExpiration().before(new Date())) {
                requestContext.abortWith(Response
                        .status(Response.Status.UNAUTHORIZED)
                        .entity("Token is expired")
                        .build());
            }
        } catch (Exception e) {
            requestContext.abortWith(Response
                    .status(Response.Status.UNAUTHORIZED)
                    .entity("Error")
                    .build());
        }
    }
}
@GET
@Path("/test")
@Auth
public String test() {
    return "Hello, " + userName;
}
实施:

@NameBinding
@Retention(RUNTIME)
@Target({TYPE, METHOD})
public @interface Auth {}
@Auth
@Provider
public class AuthFilter implements ContainerRequestFilter {

    private static final String SECRET = "SOME_SECRET_STRING";

    @Override
    public void filter(ContainerRequestContext requestContext) throws IOException {
        try {
            String userToken = requestContext.getHeaderString("token");
            Claims body = Jwts.parser().setSigningKey(SECRET).parseClaimsJws(userToken).getBody();
            if(body.getExpiration().before(new Date())) {
                requestContext.abortWith(Response
                        .status(Response.Status.UNAUTHORIZED)
                        .entity("Token is expired")
                        .build());
            }
        } catch (Exception e) {
            requestContext.abortWith(Response
                    .status(Response.Status.UNAUTHORIZED)
                    .entity("Error")
                    .build());
        }
    }
}
@GET
@Path("/test")
@Auth
public String test() {
    return "Hello, " + userName;
}
休息:

@NameBinding
@Retention(RUNTIME)
@Target({TYPE, METHOD})
public @interface Auth {}
@Auth
@Provider
public class AuthFilter implements ContainerRequestFilter {

    private static final String SECRET = "SOME_SECRET_STRING";

    @Override
    public void filter(ContainerRequestContext requestContext) throws IOException {
        try {
            String userToken = requestContext.getHeaderString("token");
            Claims body = Jwts.parser().setSigningKey(SECRET).parseClaimsJws(userToken).getBody();
            if(body.getExpiration().before(new Date())) {
                requestContext.abortWith(Response
                        .status(Response.Status.UNAUTHORIZED)
                        .entity("Token is expired")
                        .build());
            }
        } catch (Exception e) {
            requestContext.abortWith(Response
                    .status(Response.Status.UNAUTHORIZED)
                    .entity("Error")
                    .build());
        }
    }
}
@GET
@Path("/test")
@Auth
public String test() {
    return "Hello, " + userName;
}

有人能帮我解决这个问题吗?

我找到了解决方案,并发布了答案,这将对某人有所帮助。我必须在run方法中注册AuthFilter类:

environment.jersey().register(new AuthFilter());