Как привязать пользовательский контекст к запросу ДжерсиJAVA

Программисты JAVA общаются здесь
Ответить
Anonymous
 Как привязать пользовательский контекст к запросу Джерси

Сообщение Anonymous »

У меня есть REST-приложение в Джерси с аутентификацией пользователей на основе токенов. При поступлении запроса создается пользовательский объект RestContext, который добавляется к ContainerRequestContext в качестве свойства (через фильтр, который запускается сразу после получения запроса). Этот контекст управляет авторизацией пользователей (через роли) и доступом к другой бизнес-логике. Он доступен в ресурсах для выполнения бизнес-логики. Когда запрос обрабатывается, RestContext очищается во втором фильтре, который выполняется в самом конце конвейера.

Это работает нормально, хотя для этого требуется два фильтра. Я читал об использовании HK2 и InjectionResolver, и мне было интересно, могу ли я использовать инъекцию для внедрения этого RestContext в мои ресурсы и другие фильтры (например, у меня есть фильтр, который создает SecurityContext из RestContext), но я не смог найти ответа. В общем, как мне внедрить объект для каждого запроса, который зависит от контекста запроса? Возможно ли это вообще? Есть ли более простой способ сделать это, например, используя @Context?

EDIT: Как уже отмечалось, я в основном пытаюсь внедрить в свои ресурсы собственный класс в соответствии с документацией. Однако, похоже, я не могу правильно зарегистрировать свой AbstractBinder, чтобы связать внедрение моего класса. Я получаю следующее:

Код: Выделить всё

org.glassfish.hk2.api.UnsatisfiedDependencyException: There was no object available for injection at Injectee(requiredType=RestContext,parent=RestContextFilter,qualifiers={}),position=0,optional=false,self=false,unqualified=null,1435496015)
РЕДАКТИРОВАТЬ 2: Мне удалось добиться небольшого прогресса. Я создаю свой конфиг следующим образом:

Код: Выделить всё

new ResourceConfig(allResources())
.packages(packagesToScan())
.registerInstances(new RestContextBinder());
поскольку в документации четко указано, что внедрение связующих поддерживается не через класс, а через экземпляр.

Однако я теперь я получаю это:

Код: Выделить всё

A MultiException has 3 exceptions.  They are:
1. java.lang.IllegalStateException: Not inside a request scope.
2. java.lang.IllegalArgumentException: While attempting to resolve the dependencies of my.package.RestContextFilter errors were found
3. java.lang.IllegalStateException: Unable to perform operation: resolve on my.package.RestContextFilter
RestContext обрабатывается @Inject в фильтре запроса/ответа. Затем он используется для создания SecurityContext и установки его в ContainerRequestContext, после чего он очищается в фильтре ответов. Разве запрос фильтра ответа не ограничен областью действия? Почему я получаю сообщение об ошибке?

Подробнее здесь: https://stackoverflow.com/questions/218 ... ey-request
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «JAVA»