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 "доменом безопасности" непосредственно перед вызовом фактического компонента. Конечно, он ничего не знал о Широ.