Есть ли на Джерси перехватчик, похожий на тот, что был в Spring's HandlerInterceptor

Мне нужен I, nterceptor в Jersey 2.x, который дает ссылки на запрос, ответ и метод, который соответствует пути к веб-службе.

Что-то похожееHandlerInterceptor весны.

Требования:

Нужны аннотации, используемые на уроке - Выполните следующие проверки, только если соответствующий метод, который должен быть вызван джерси, НЕ аннотируется пользовательской аннотацией.Запрос - Получить / установить атрибуты и получить объект сеанса для проверки пользователя.отклик - Для перенаправления вызова в случае, если любая проверка не пройдена даже до вызова соответствующего Methos.

Spring эквивалентный код:

public class WebServiceInterceptor implements HandlerInterceptor {
     @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {

        try {
            SkipWebServiceIntercept skipWebService = handler.getClass().getAnnotation(SkipWebServiceIntercept.class);

            if (skipWebService != null) {
                return Boolean.TRUE;
            }

            ...

            if(securityFails)
            {
                if ("XMLHttpRequest".equals(request.getHeader("X-Requested-With"))) {
                    response.setCharacterEncoding("utf-8");
                    response.setContentType("application/json");
                    PrintWriter out = response.getWriter();
                    String json;
                    ...
                    out.println(json);
                    return Boolean.FALSE;
                }
                else {
                    response.sendRedirect(redirectUrl);
                }
            }
            else
            {
                return Boolean.TRUE;
            }
        }catch (Exception e) {
            log.error("Exception in preHandle, redirecting to Login page", e);
            return LoginUtil.redirectToLogin(request, response);
        }
    }
}

Я нашел ссылки на

ReaderInterceptor - Это обеспечивает только аннотации класса. Нет доступа к запросу / ответу.ContainerRequestFilter - Предоставляет объект запроса, но не аннотации / ответ.ContainerResponseFilter - Дает запрос и ответ. Но после того, как веб-сервис / метод вызывается.

Есть ли другой способ, которым это может быть достигнуто без использования фильтров. потому что мне нужно, чтобы эта обработка происходила ТОЛЬКО при наличии соответствующего веб-сервиса. С другой стороны, фильтры с / * всегда будут выполнять эти проверки, даже если ресурс не найден.

Редактировать: Благодаря @peeskilletответ Вот как я это реализовал.

@Provider
public class ResourceInterceptor implements DynamicFeature {

    @Override
    public void configure(ResourceInfo resourceInfo, FeatureContext context) {

        System.out.println("Resource Interceptor called");

        if (resourceInfo.getResourceClass() != null
                && resourceInfo.getResourceClass().getAnnotation(SkipWebServiceIntercept.class) != null)
            return;

        context.register(LoginFilter.class);
    }

}


@Slf4j
public class LoginFilter implements ContainerRequestFilter {

    @Context
    private HttpServletRequest      request;

    @Context
    private ServletContext          servletContext;

    @Override
    public void filter(ContainerRequestContext requestContext) throws IOException {
        try {


WebApplicationContext springContext = WebApplicationContextUtils.getWebApplicationContext(servletContext);

CookieAuthenticator cookieAuthenticator = springContext.getBean(CookieAuthenticator.class);

HttpSession session = request.getSession(true);

...

// Отправка JSON / Object обратно в ответ

...
String json = gson.toJson(resposeJson);

Response response = new ResponseBuilderImpl().encoding(StandardCharsets.UTF_8.name())
                        .type(MediaType.APPLICATION_JSON).entity(json).build();
requestContext.abortWith(response);
...

// или возвращаем URL

...
URI uri = new URI(baseUrl + redirectUrl + "?refback=" + url);
requestContext.abortWith(Response.temporaryRedirect(uri).build());
...

Оба подхода работают отлично, аналогично HandlerInterceptor из Spring.

Ответы на вопрос(1)

Ваш ответ на вопрос