Jboss EJB и Широ

У меня есть приложение CDI -> EJB. Я делаю безопасность в прошлом с JBoss j_security. Моя безопасность с Сиро работает.

Но моя единственная проблема в том, как я могу получить SessionContext в моем EJB? С Jboss Security я получил имя пользователя, который входит в систему с помощью:

SessionContext sessionContext;String email = sessionContext.getCallerPrincipal (). GetName();

Теперь я хочу получить имя пользователя в моем EJB. Как я могу установить имя пользователя с SessionContext?

Спасибо за помощь

1 ответ

Это немного сложно, и это также зависит от версии JBoss, которую вы используете. В диапазоне AS 7.x и EAP 6.x это невозможно сделать с помощью общедоступных API из-за нескольких ошибок.

Для того, чтобы сделать sessionContext зная имя пользователя и роли, вы можете использовать специальный код JBoss, как я использовал здесь: https://github.com/javaeekickoff/jboss-as-jaspic-patch/commit/d691fd4532d9aeae6136e3adc2537ff81c525673

Это должно быть что-то вроде;

SecurityContext context = SecurityActions.getSecurityContext();
context.getUtil().createSubjectInfo(new SimplePrincipal(userName), 
    null,
    someSubject
);

Посмотрите на остальную часть файла, чтобы увидеть, как someSubject должен быть создан и заселен.

К сожалению для упомянутых версий JBoss @RolesAllowed никогда не будет работать, так как JBoss не принимает уже аутентифицированную идентификацию от локального вызывающего, но всегда консультируется с конкретным JBoss "доменом безопасности" непосредственно перед вызовом фактического компонента. Конечно, он ничего не знал о Широ.

Другие вопросы по тегам