В EJB есть несколько видов механизмов сеанса, но все они запускаются, когда начинается удаленный вызов, и заканчиваются, когда это заканчивается. На старом - это контекст транзакции (Адам Бин писал об этом некоторое время назад), а на более новом - Session Session Scope.
Вопреки распространенному мнению, эта область не только отражает область сеанса http, но в отсутствие сеанса http (как для удаленных вызовов) она представляет собой единую цепочку вызовов или доставку сообщений (для mdbs).
При таком сеансе ваш удаленный SWT-клиент по-прежнему должен передавать sessionId удаленной службе, но любые локальные bean-объекты, вызываемые оттуда, могут забрать его из этого сеанса "cdi".
Другой вариант подобен тому, что говорит jtahlborn: с вашим собственным модулем входа в систему вы можете вернуть пользовательский принципал вместо стандартного. Ваш код может сначала запросить обычного участника, а затем попытаться привести его.
Проблема в том, что этот материал зависит от контейнера, и JBoss всегда забывает об этом. Он почти всегда ломается после каждого обновления, и пользователям приходится биться и кричать, чтобы исправить это в какой-то следующей версии (только чтобы увидеть, как он снова ломается в версии после этого). Без поддержки JBoss это бесконечная битва.
Еще один вариант - позволить пользователю войти в систему с помощью sessionId в качестве имени. Модуль входа в систему может быть простым модулем, который принимает все и просто помещает принципала в контекст безопасности с sessionId как «имя». Это немного странно, но мы успешно использовали это для получения любых данных, которые могут быть выражены строкой в контексте безопасности. Конечно, вы должны позволить своему клиенту проводить здесь обычную проверку подлинности контейнера, что, в первую очередь, обходится без использования Spring Security.