Ответ 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
. Этот класс делает некоторые предположения о структуре вашей базы данных, но вы можете настроить его.