Как настроить JDBCRealm для получения источника данных из JNDI
как использовать JDBCRealm
для обработки аутентификации и авторизации пользователей в сервлеты? Единственный пример, который я могу найти, - создать источник данных в web.xml
(например,аутентификация против базы данных с помощью shiro 1.2.1).
Я не хочу включать учетные данные базы данных в мое исходное дерево (по очевидным причинам) и предпочел бы использовать контекстный источник данных через JNDI, как и для всех других СУБД, которые я использовал для любой другой цели в каждом другом сервлете проект я разработал.
как настроить Shiro JDBCRealm
для получения DataSource
от JNDI?
4 ответов
ответ Врушанка был очень близок: вам не нужно подкласс JdbcRealm здесь - вы можете использовать Shiro's JndiObjectFactory чтобы получить источник данных, а затем ссылаться на этот источник данных при настройке JdbcRealm:
[main]
dataSource = org.apache.shiro.jndi.JndiObjectFactory
dataSource.resourceName = java://app/jdbc/myDataSource
jdbcRealm = org.apache.shiro.realm.jdbc.JdbcRealm
jdbcRealm.dataSource = $dataSource
#addt'l config
для веб-приложения, сохраните файл под WEB-INF/shiro.ini
.
посмотреть Также
Я прокомментировал ответ @Les Hazlewood и комментарий @Recurse,но может быть, что новый ответ лучше.
в моем случае я должен использовать только имя источника данных JDNI на weblogic и полный путь на tomcat:
Tomcat:
ds = org.apache.shiro.jndi.JndiObjectFactory
ds.requiredType = javax.sql.DataSource
ds.resourceName = java:/comp/env/oracle/pportal_dev
# JDBC realm config
jdbcRealm = org.apache.shiro.realm.jdbc.JdbcRealm
jdbcRealm.permissionsLookupEnabled = true
jdbcRealm = org.apache.shiro.realm.jdbc.JdbcRealm
jdbcRealm.dataSource = $ds
сервер WebLogic
ds = org.apache.shiro.jndi.JndiObjectFactory
ds.requiredType = javax.sql.DataSource
ds.resourceName = oracle/pportal_dev
# JDBC realm config
jdbcRealm = org.apache.shiro.realm.jdbc.JdbcRealm
jdbcRealm.permissionsLookupEnabled = true
jdbcRealm.dataSource = $ds
Примечание
ds.resourceName = java:/comp/env/oracle/pportal_dev
vs
ds.resourceName = oracle/pportal_dev
для работы Широ с разрешениями с областью JDBC этот параметр незаменим:
jdbcRealm.permissionsLookupEnabled = true
Я потратил много часов на это, потому что по умолчанию для этой опции является false. Другими словами, если вы не ставите эту опцию, Shiro всегда возвращает пустой список разрешений.
вам нужно будет создать собственную собственную область, расширив JdbcRealm
для программного поиска источника данных через предоставленный JNDI.
затем вы можете передать JNDI как свойство в shiro.ini
[main]
# realms to be used
customSecurityRealm=package.to.your.CustomRealm
customSecurityRealm.jndiDataSourceName=java:app/jdbc/myDatasource
см. приведенную ниже статью в качестве примера. Он обеспечивает как аутентификацию, так и авторизацию.