Apache Shiro - использование базы данных для чтения пользователей, ролей и разрешений

В настоящее время у меня есть приложение Swing, и я не хочу интегрировать Apache Shiro для аутентификации и делегирования разрешений определенным ролям. Мне уже удалось прочитать пользователей из файла shiro.ini, который я создал для тестов, он выглядит примерно так:

[users]
admin = 123456, Administrator

[role]
Administrator = *:*:*

Однако это было только для тестирования, теперь мне нужно прочитать разрешения из базы данных, поэтому я сохранил в базе данных таблицу с информацией, которая мне нужна, и выглядит примерно так:

users (id,password,username)
userRoles (userId, role)
rolePermission (permissionID,permission,roleID)

Я пытался понять учебники, в которых используется область JDBC, однако они используют веб-приложения или специальные фреймворки для управления их соединением с базой данных, например Apache Derby или BoneCP, и они еще более запутывают меня с помощью эти примеры.

Итак, что я спрашиваю, как мне нужно настроить файл shiro.ini, если я хочу использовать область JDBC (с базой данных Oracle) и какие классы требуется для siro.ini. Любые примеры или объяснения будут оценены!

Ответ 1

Интерфейс Realm представляет собой

компонент безопасности, который может получить доступ к безопасности приложения сущности, такие как пользователи, роли и разрешения для определения аутентификации и авторизации.

Вы можете реализовать его для взаимодействия с любым источником для поиска пользователей и их разрешений. Если вы хотите взаимодействовать с SQL-базой данных, вы можете это сделать. Если вы хотите взаимодействовать с текстовым файлом, вы можете это сделать. Если вы хотите взаимодействовать с веб-сервисом, вы тоже можете это сделать.

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

Возьмем пример: у вас есть база данных с таблицей Accounts как

username | password | role 

таблица Permissions как

permission_id | permission_name

и таблицу Account_Permissions

username | permission_id

Другими словами, Account может иметь одну роль, но несколько разрешений. С JDBC вы можете очень легко запросить такую ​​базу данных и получить имена пользователей, пароли, роли и разрешения. Ваша реализация AuthorizingRealm сделает именно это и построит объекты, ожидаемые Shiro API.

Прочитайте этот документ в силиконовой последовательности Shiro, чтобы понять, куда входит AuthenticatingRealm.

Что касается файла INI , в зависимости от того, как вы реализуете свой Realm, вам нужно объявить его как

myRealm = com.company.security.shiro.YourDatabaseRealm

возможно, настройки некоторых свойств

myRealm.databaseName = account_database

Сиро предоставляет свой собственный класс JdbcRealm, который расширяет AuthorizingRealm. Этот класс делает некоторые предположения о структуре вашей базы данных, но вы можете настроить его.