在DropWizard中命名绑定(泽西岛)

时间:2017-11-29 18:29:02

标签: java rest jersey dropwizard

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

接口

@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;
}

任何人都可以帮忙解决这个问题吗?

1 个答案:

答案 0 :(得分:2)

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

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