Привязка имени 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 особенность.

Другие вопросы по тегам