2009-05-07 10 views
2

Я использую Jbos AS 5 и DatabaseServerLoginModule для авторизации. Я моя политика приложения определяется как (например, только, а не фактический код):Как получить роли пользователя в Servlet?

<application-policy name = "jbossmq"> 
    <authentication> 
    <login-module code = "org.jboss.security.auth.spi.DatabaseServerLoginModule" 
     flag = "required"> 
     <module-option name = "unauthenticatedIdentity">guest</module-option> 
     <module-option name = "dsJndiName">java:/MyDatabaseDS</module-option> 
     <module-option name = "principalsQuery">SELECT PASSWD FROM JMS_USERS WHERE USERID=?</module-option> 
     <module-option name = "rolesQuery">SELECT ROLEID, 'Roles' FROM JMS_ROLES WHERE USERID=?</module-option> 
    </login-module> 
    </authentication> 
</application-policy> 

После того как пользователь успешно авторизован, как я могу получить роли пользователей из моего сервлета? В приведенном выше фрагменте кода роли выбираются из базы данных, но где они хранятся? В сессии !? Если да, то какие переменные сеанса?

Кроме того, возможно ли использовать Ldap Authentication и Database Authorization в JBoss?

ответ

3

Клинтон в основном правильно, метод

boolean HttpServletRequest.isUserInRole(String role) 

может использоваться, чтобы проверить, если пользователь имеет определенные роли, назначенные. Однако этот метод предназначен для проверки ролей J2EE, определенных приложением (в дескрипторе EAR, application.xml).

Во время развертывания или путем компоновки дескриптора, специфичного для AS, в вашем EAR-файле необходимо указать сопоставление ролей пользователей сервера приложений (которые вы установили принципалам в вашем модуле входа) в приложение J2EE. роли.

1

Я знаю о методе:

boolean HttpServletRequest.isUserInRole(String role) 

Я знаю, что не дает вам список всех ролей, но это будет служить вашей цели?

1

Если контейнер JACC совместим следующий фрагмент кода может работать (по крайней мере для меня на Glassfish 3.1.x)

Subject subject = (Subject) PolicyContext.getContext("javax.security.auth.Subject.container"); 
for (Principal principal : subject.getPrincipals()) { 
    LOG.debug("In subject: " + principal.getName()); 
} 

Первый удар (обычно) ваш главный пользователь и другие, как правило, группа директора школы. Пожалуйста, не надо, чтобы, если вам известно имя класса участников группы, вы можете отфильтровать его, вызывая вместо этого getPrincipals(Class<T> c).

Смежные вопросы