Привязка имени OSGI JAX-RS
В настоящее время я работаю с проектом "Чистая Кура-Осги". Моя цель - внедрить аутентификацию JWT или что-то похожее на нее, просто чтобы обеспечить безопасные конечные точки. Я пробовал фильтр аутентификации с помощью привязки имени. Однако, похоже, что в некоторых случаях привязка к имени не регистрируется. В этом случае я протестировал простой проект Maven и обнаружил, что все работает там. Есть код:
TestAuth.class
@Path("/test")
public class TestAuth extends Application {
@GET
@Secured
@Produces(MediaType.TEXT_PLAIN)
public String test() {
return "hello";
}
}
интерфейс привязки имени:
@NameBinding
@Retention(RUNTIME)
@Target({TYPE, METHOD})
public @interface Secured {}
Фильтр:
@Provider
@PreMatching
@Secured
public class AuthenticationFilter implements ContainerRequestFilter {
public void filter(ContainerRequestContext containerRequestContext) throws IOException {
System.out.println("GG");
}
}
Я проверил много способов исправить это, например: это, но этот, похоже, тоже не работает.
1 ответ
После множества разных подходов к решению я нашел простое решение. Просто зарегистрировавшись, как компонент исправляет проблему. Класс фильтра будет выглядеть так:
@Provider
@Component(service = ContainerRequestFilter.class)
@Secured
public class AuthenticationFilter implements ContainerRequestFilter, ContainerResponseFilter {
private static final Logger LOG = LoggerFactory.getLogger(AuthenticationFilter.class);
public void filter(ContainerRequestContext containerRequestContext) throws IOException {
LOG.info("Request filter called");
}
public void filter(ContainerRequestContext containerRequestContext,
ContainerResponseContext containerResponseContext) throws IOException {
LOG.info("Response filter called");
}
}
Это немного поздно, но я снова наткнулся на эту проблему... Проблема здесь действительно в @PreMatching
аннотация, которая эффективно конфликтует с @NameBinding
аннотация. Итак, если вы хотите использовать@RolesXXX
аннотации, вы вынуждены определить свой фильтр как @PreMatching
потеря NameBinding
особенность.