Привязка имени (Джерси) в DropWizard
Я хочу создать пользовательскую аннотацию с помощью NameBinding of Jersey для Auth через JWT, я использовал эту технологию в другом проекте plain-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;
}
Кто-нибудь может помочь с этим вопросом?
1 ответ
Я нашел решение и опубликовал ответ, это было бы полезно для кого-то. Мне пришлось зарегистрировать класс AuthFilter в методе запуска:
environment.jersey().register(new AuthFilter());