我想通过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;
}
任何人都可以帮忙解决这个问题吗?
答案 0 :(得分:2)
我找到了解决方案并发布了对某人有帮助的答案。我必须在run方法中注册AuthFilter类:
environment.jersey().register(new AuthFilter());