я знал, что и она работает, но мне нужно, чтобы получить предмет, чтобы получить также roleprincipal
К сожалению, это не работает, как, что в Java EE. Предмет JAAS - это всего лишь «сумка принципов», а какая из них представляет собой принципал пользователя/вызывающего абонента и/или принципала (-ов) роли просто не стандартизирована. Здесь каждый другой контейнер делает все по-другому. Javadoc for Tomcat's JAASRealm описывает это и объясняет Tomcat конкретной конвенции (курсив мой):
Спецификация JAAS описывает результат успешной регистрации в качестве экземпляра javax.security.auth.Subject, которая может содержать ноль или более java.security.Principal objects в возвращаемом значении метода Subject.getPrincipals(). Однако она не дает никаких указаний на как отличить принципалов, которые описывают конкретного пользователя (и , таким образом, целесообразно возвращать в качестве значения request.getUserPrincipal() в веб-приложения) от Принципала (ов) что описать авторизованные роли для этого пользователя. Для того, чтобы сохранить как можно больше независимости как можно дальше от лежащего в основе LoginMethod реализации выполняемой JAAS, следующая политика реализуется этим Realm: [...]
Кроме того, из среды Java EE редко даже имеют доступ к теме JAAS, часто даже не с помощью специальных методов поставщика. JAAS далек от универсального стандарта, который, как вам кажется, кажется, особенно, когда речь идет о Java EE.
Единственное, с чем вы можете получить доступ в переносном режиме, - это руководитель звонящего и связанные с ним роли, но даже те, которые не должны быть точными принципами звонящего, которые вы создали в модуле входа в JAAS.
JBoss AS, например, несколько раз копирует этот принцип, используя свои собственные классы. Итак, если ваш модуль JAAS сохранил kaz.zak.FooPrincipal
в теме для принципала пользователя/вызывающего абонента, то HttpServletRequest#getUserPrincipal()
может вернуть org.jboss.security.SimplePrincipal
. Единственное, что гарантировано, это то, что getName()
на этом экземпляре вернет ту же строку.
Для некоторых более фона на эту тему:
Последний источник в основном говорит то же самое, в разных формулировках;
Несмотря на то, что можно использовать JAAS в пределах Tomcat в качестве аутентификации механизма (JAASRealm), гибкость рамках JAAS теряется после того, как пользователь аутентифицирован. Это связано с тем, что принципы - это , которые используются для обозначения понятий «пользователь» и «роль» и больше не являются , доступными в контексте безопасности, в котором выполняется webapp. Результат аутентификации можно получить только через request.getRemoteUser() и request.isUserInRole().
Это уменьшает структуру JAAS для авторизации до простой пользовательской/ролевой системы , которая теряет свое соединение с политикой безопасности Java .
Убедитесь, что ваша область используется для веб-приложение, то вы можете попробовать Servlets API, 'HttpServletRequest.getUserPrincipal()' –
Я знал, что и она работает, но мне нужно, чтобы получить предмет, чтобы получить также roleprincipal – sasaman85