Nano Hash - криптовалюты, майнинг, программирование

JBoss / Resteasy, как предварительно заполнить объекты с помощью фильтра перед открытым API?

Среда: JBoss AS 7, RestEasy 3.0.5.

Я хочу использовать фильтр предварительной обработки в своем приложении для аутентификации определенного пользователя и добавить этого аутентифицированного пользователя в область запроса. Я пробовал следующее:

@Provider
public class SecurityFilter implements ContainerRequestFilter {

    @Override
    public void filter(ContainerRequestContext requestContext) {
        // authenticate, lookup user code etc...
        requestContext.setProperty("User", new User("test"));
    }
}

А затем получите доступ к нему на уровне компонента, используя:

@Stateless
public class TestBean {

    @Context HttpServletRequest servletRequest;

    @GET
    @Path("/hello")
    public String hello() {
        return "Hello " + servletRequest.getAttribute("User");
    }

}

Однако элементы Context не вводятся, когда bean-компонент помечен как не имеющий состояния (без сохранения состояния требуется для логики EJB) из-за Ошибка RestEasy двухлетней давности.

  1. Кто-нибудь может придумать решение этой проблемы?
  2. В качестве альтернативы, есть ли более типичное решение для предварительного заполнения этих объектов с помощью фильтра?

Доброе спасибо за прочтение.

27.11.2013

Ответы:


1

Что я сделал раньше, так это то, что у меня есть веб-приложение, «фасад», если хотите, для EJB. В этом приложении реализован слой JAX-RS. Фильтр сервлет перехватывает запрос к ресурсам JAX-RS и вызывает службу CDI, реализующую логику "аутентификация, поиск пользовательского кода и т. д.". В случае успеха служба CDI экспортирует текущий пользовательский объект в CDI. Этот пользовательский объект @Inject добавлен в EJB.

Если вам подходит CDI (и я не понимаю, почему бы и нет в этой настройке), вы можете сделать то же самое (то есть экспортировать User в CDI) из своего SecurityFilter без необходимости создавать веб-приложение.

Кроме того, зависимость сервисного уровня (EJB) от веб-API (HttpServletRequest) немного пугает; Я действительно думаю, что внедрение зависимостей фактического объекта User - это путь.

27.11.2013
  • Спасибо, внедрение зависимостей, безусловно, правильный подход. Добавление хранилища RequestScoped для совместного использования информации о пользователях было чистым и простым и позволяет избежать загрязнения EJB специфическими веб-API. 27.11.2013
  • Новые материалы

    Кластеризация: более глубокий взгляд
    Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

    Как написать эффективное резюме
    Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

    Частный метод Python: улучшение инкапсуляции и безопасности
    Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

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

    Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
    Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

    Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
    В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

    Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
    В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..