#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();