Получение полного пути из RequestContext RESTEasy3.0.7 PreRequestFilter для обеспечения безопасности в JAVA

#java #resteasy

#java #resteasy

Вопрос:

Я работаю над RESTEasy3.0.7 PreRequestFilter, чтобы сделать мой REST API безопасным. Здесь я пытаюсь получить полный путь, как указано в кратком описании экрана, которое доступно в MethodInvoker. Прямого метода для получения этого значения не существует.. Я пытался использовать getProperty, но это также не сработало.

 @Provider
public class PreRequestFilter implements javax.ws.rs.container.ContainerRequestFilter
{
    @Override
    public void filter(ContainerRequestContext requestContext) throws IOException 
    {
        ResourceMethodInvoker methodInvoker = (ResourceMethodInvoker) requestContext.getProperty("org.jboss.resteasy.core.ResourceMethodInvoker");
        Method method = methodInvoker.getMethod();
  

введите описание изображения здесь

Мне просто нужен MethodInvoker -> метод -> значение полного пути .. может кто-нибудь помочь в этом отношении, например, как получить это значение, если нет прямого метода..

Комментарии:

1. Вам нужен шаблон, включающий {requestId} или запрашиваемый путь с замененным RequestID ?

2. Привет, Лефлох, да, мне нужен шаблон, который включает {RequestID}, как в приведенном выше полном пути, т.е. /status/1.0/box/peripheral/request/{RequestID}

3. Другая вещь была бы простой. Я не знаю прямого пути. Вы могли бы заменить шаблоны обратно на запрошенный URI. Или вы могли бы сами объединить сегменты пути из @Path значений. Оба нехорошие.

4. Да, оба варианта не очень хороши, но я должен использовать какой-то механизм до тех пор, пока не найду правильный способ.

Ответ №1:

Получение запрошенного пути может быть выполнено легко:

 String path = requestContext.getUriInfo().getPath();
  

Но я не знаю стандартного способа получения URI-шаблона без подставленных параметров пути. Это ResourceMethodInvoker только отображение java.lang.reflect.Method org.jboss.resteasy.spi.metadata.ResourceMethod , но не org.jboss.resteasy.spi.metadata.ResourceMethod само по себе, к которому вам нужно получить доступ.

Вы можете получить шаблон для каждого отражения:

 Field field = ResourceMethodInvoker.class.getDeclaredField("method");
field.setAccessible(true);
ResourceMethod method = (ResourceMethod) field.get(methodInvoker);
String path = method.getFullpath();