2013-03-05 3 views
6

Я запускаю веб-приложение JavaEE 6 на Glassfish 3. Я использую JAAS с jdbcRealm и директиву по умолчанию для сопоставления ролей. В моей базе данных у меня есть таблица для отображения имен пользователей к их ролям:Почему я перечисляю роли безопасности в web.xml, когда они находятся в базе данных jdbcRealm?

username | role 
----------+------- 
john  | admin 
mary  | user 

Почему мне нужно перечислить эти роли еще раз в моем web.xml?

<security-role> 
    <role-name>admin</role-name> 
</security-role> 
<security-role> 
    <role-name>user</role-name> 
</security-role> 

Без этого isUserInRole() всегда возвращает false.

+0

выглядит близко к http://stackoverflow.com/questions/5294252/confusing-about-security-role-in-web-xml –

+0

На самом деле это не касается сферы безопасности. –

ответ

7

Вы не переопределяете роли безопасности в web.xml. Вы указываете их, чтобы сервер приложений знал об их использовании в вашем коде.

При развертывании защищенного приложения сервер приложений считывает дескриптор развертывания для запроса информации о конфигурации безопасности. Он знает о ролях, которые используются в вашем приложении. Затем приложение может использовать роли и ожидать, что сервер приложений сможет сопоставить их с пользователями и группами (которые в конечном итоге снова разрешат пользователям, так как пользователи являются самыми надежными строительными блоками безопасности).

Говоря о сопоставлении ролей для пользователей, в это место входит область. Он предлагает сопоставление, чтобы вы знали, что роль X в дескрипторе развертывания сопоставляется с ролью X в базе данных, которая, в свою очередь, сопоставляет пользователям A и B .

С учетом этого база данных, используемая jdbcRealm, имеет точно такие же роли, поскольку они являются ключами к пользователям, которым сервер приложений должен сопоставляться с ролями в приложении.

Что вы используете в своем коде и дескрипторе развертывания - это логическое имя группы пользователей, которые разрешены реальным пользователям через сопоставление, предлагаемое jdbcRealm.

+0

В моем простом приложении «привет-мир»; Я не указал тег . Но все работает так, как ожидалось. то есть браузер запрашивает аутентификацию. И введенный пользователь, и его роль правильно определена tomcat. Так это просто приятная особенность? –