Я использовал shiro, фреймворк управления разрешениями, в своей работе. До этого он был всегда в использовании, и я мало что в нем понимал. Теперь у меня есть время изучить использование этого фреймворка разрешений Shiro. .
Что такое Широ?
Apache Shiro — это мощная и гибкая платформа безопасности с открытым исходным кодом, которая безошибочно обрабатывает аутентификацию, авторизацию, управление корпоративными сеансами и шифрование.
Основная цель Apache Shiro — сделать его простым в использовании и понятным. Безопасность может быть сложной, иногда даже болезненной, но это не обязательно.
Фреймворки должны максимально скрывать сложность, предоставляя чистый и интуитивно понятный API, упрощающий усилия разработчиков по обеспечению безопасности своих приложений.
Поскольку многие люди предпочитают использовать для сравнения Spring Security и Shiro, предоставляемые Spring, мы также сравниваем этот контент.
Apache Shiro — это фреймворк безопасности для Java.
В настоящее время все больше и больше людей используют Apache Shiro, потому что он достаточно прост, по сравнению со Spring Security может не иметь мощных функций Spring Security, но в реальной работе может и не нуждаться в таких сложных вещах, поэтому используйте небольшие и достаточно простого Широ.
Поэтому мы много раз используем Shiro непосредственно для контроля безопасности в своей работе.
После того, как мы рассмотрели, давайте посмотрим, какая польза от Широ? 1. Аутентифицируйте пользователей, чтобы подтвердить их личность. 2. Осуществляйте контроль доступа для пользователей.
Например, мы можем использовать его, чтобы определить, назначена ли пользователю роль безопасности. Тогда мы можем судить, какие полномочия у этого человека в проекте, а значит, если есть 2 человека, один администратор, у него есть функция добавления, удаления, изменения и проверки, а другой пользователь только еще раз проверяет функцию , без добавления Функция удаления, управляемая Широ, позволяет достичь этого эффекта.
Мы можем взглянуть на Shiro на официальном сайте Apache и узнать, какие функции он содержит.
Давайте посмотрим, что представляет собой каждый модуль.
Аутентификация: Аутентификация, иногда называемая просто «логином», представляет собой доказательство того, что пользователь является тем, кем он себя называет.
Авторизация: Авторизация, процесс управления доступом, то есть абсолютное «кто» для доступа к «чему». Авторизация используется для ответа на вопросы безопасности, такие как «разрешено ли пользователю редактировать учетную разрешено просматривать эту веб-страницу", "разрешено ли пользователю просматривать эту страницу" Может ли доступ" к этой кнопке? «Это все решения, к которым у пользователя есть доступ, и, следовательно, все они представляют собой проверки авторизации.
Криптография: Криптография — это практика защиты информации от несанкционированного доступа путем ее сокрытия или превращения в бессмыслицу, чтобы никто другой не мог ее прочитать. Широ фокусируется на двух основных элементах криптографии: шифрах, которые шифруют данные с использованием открытых или закрытых ключей, и хэшах (также известных как дайджесты сообщений), которые необратимо шифруют данные, такие как пароли.
Основная цель Shiro Cryptography — взять традиционно очень сложную область и упростить ее для других, обеспечивая при этом надежную криптографию.
Управление сеансом: сеансы сеансов, сеансы — это блоки данных, которые ваши пользователи переносят в течение определенного периода времени при использовании вашего приложения. Традиционно сеансы посвящались средам Web или EJB. больше никогда! Shiro поддерживает сеансы для любой среды приложений. Кроме того, Широ предлагает множество других замечательных функций, которые помогут вам управлять сеансами.
Веб-поддержка: API веб-поддержки Shiro может легко помочь защитить веб-приложения. Он в основном используется для обеспечения хорошей поддержки веб-программ.
Кэширование. Кэширование, которое является компонентом первого уровня в Apache Shiro, обеспечивает быстроту и эффективность операций безопасности.
Параллелизм: Широ использует свои функции параллелизма для поддержки многопоточных приложений.
Тестирование: существует поддержка тестирования, чтобы помочь вам написать модульные и интеграционные тесты и обеспечить их безопасность, как и ожидалось.
«Запуск от имени»: на самом деле это функция, которая позволяет пользователю принять личность другого пользователя, что иногда очень эффективно при управлении сценариями.
Запомнить меня: запоминает личность пользователя в разных сеансах, поэтому ему нужно входить в систему только при принудительном входе.
Ядро Широ
Широ на самом деле имеет три основных компонента: Subject, SecurityManager и Realms.
Субъект: Субъект — это, по сути, особое «представление» безопасности текущего исполняющего пользователя. Принимая во внимание, что слово «Пользователь» обычно означает человека, а Субъект может быть человеком, но также может представлять стороннюю службу, учетную запись демона, задание cron или что-то еще в этом роде — в основном то, что в настоящее время работает с программное обеспечение, с которым можно взаимодействовать.
Все экземпляры Subject привязаны (и необходимы) к SecurityManager. Когда вы взаимодействуете с субъектом, эти взаимодействия преобразуются во взаимодействия с конкретным субъектом, взаимодействующим с SecurityManager. Мы можем думать о Subject как о фасаде, а SecurityManager — о реальном исполнителе.
SecurityManager: Менеджер безопасности, что означает, что все операции, связанные с безопасностью, будут взаимодействовать с SecurityManager, и он управляет этим Субъектом, который на самом деле является ядром Широ и сердцем архитектуры Широ. И как своего рода «зонтичный» объект для координации внутренних компонентов безопасности для формирования графа объекта.
Realms: домен, Shiro получает данные безопасности (такие как пользователи, роли, разрешения) из Realm, то есть, если SecurityManager хочет проверить личность пользователя, ему необходимо получить соответствующего пользователя из Realm для сравнения, чтобы определить, является ли удостоверение пользователя является законным; ему также необходимо получить удостоверение пользователя от Realm. Получите соответствующую роль/полномочия пользователя, чтобы проверить, может ли пользователь работать; Realm можно рассматривать как источник данных, то есть безопасный источник данных.
При настройке Shiro необходимо указать хотя бы одно Realm для аутентификации и/или авторизации. SecurityManager может быть настроен с несколькими Realms, но требуется хотя бы один.
Мы можем увидеть контроль Широ над разрешениями через простой вход в систему.
Давайте разберемся с этим на диаграммах, а затем напишем простой код
На приведенном выше рисунке показан дизайн разрешений роли shiro,
А затем мы можем посмотреть на его конкретную диаграмму входа в систему.
Позвольте мне объяснить эту картину.
1. Операция входа в систему передает пароль имени пользователя субъекту, субъект вызывает свой собственный метод входа в систему, чтобы передать имя пользователя и пароль диспетчеру разрешений, диспетчер привилегий передал пароль имени пользователя методу аутентификации Realm разработчика, Realm назвал базу данных в соответствии с пользователем. Найдите, существует ли этот пользователь, если в сеансе есть депозит аутентификационной информации.
/* * 参数1:登陆标识 * 参数2:正确的密码 * 参数3:认证|授权器的名字 */ SimpleAuthenticationInfo info = new SimpleAuthenticationInfo(user, user.getPassword(), this.getClass().getName());
2. Менеджер разрешений автоматически определяет, является ли пропущенный пароль такой же, как правильный пароль
3. Доступ к 3 типам ресурсов (страницам) Фильтр ищет диспетчера полномочий, чтобы определить, имеет ли пользователь полномочия xxx. Диспетчер полномочий извлекает объект информации аутентификации из сеанса и возвращает его в область. Область определяет, какие полномочия у пользователя имеет и инкапсулирует его в информацию об авторизации, возвращаемую диспетчеру разрешений, а диспетчер разрешений возвращает результат оценки фильтру.
4. Доступ к 3 типам ресурсов (дополнение ххх требует доступа к сервису) (для фильтров относится к 2 типам ресурсов), при выполнении метода придет предварительное уведомление (добавьте аннотацию @RequiresPermissions("courier :list") в метод esrvice), уведомление о разрешении ищет диспетчер разрешений, чтобы определить, есть ли у пользователя разрешение xxx, диспетчер разрешений извлекает объект информации аутентификации из сеанса, возвращает его в область, а область определяет, что разрешение, которое есть у пользователя, инкапсулирует его в информацию об авторизации и возвращает диспетчеру разрешений. Диспетчер разрешений возвращает результат оценки в уведомление о разрешении.
На самом деле, говоря простым языком /userAction_login ----------> Запрос сначала достигает фильтра разрешений shiroFilter, и сначала судит, какие типы ресурсов
Логин относится к классу ресурсов и напрямую высвобождается --------> userActon (userAction вызывает и выполняет объект-субъект (запись использования — это объект записи операции, который имеет метод входа в систему, выход из системы). метод и метод для получения текущего объекта) Метод входа в систему subject.login метод (с именем пользователя, паролем)
————>Объект субъекта вызывает метод входа в систему диспетчера безопасности.Диспетчер разрешений не может определить правильность пользователя и пароля.
----> REAM Certification | Authorizer (разработчик пишет, определить, существует ли имя пользователя, какое разрешение) ----> Превратите объект информации аутентификации в securityManager () Если информация аутентификации не проблема, управление правами Устройство будет поместить информацию аутентификации в сеанс (подтвержденный для входа в систему)
Царство можно настроить;
@Service("MyRealm")public class MyRealm extends AuthorizingRealm{ //父类接口Realm @Autowired private UserDao ud; @Autowired private RoleService rs; @Autowired private PermissionService ps; @Override //授权 protected AuthorizationInfo doGetAuthorizationInfo(PrincipalCollection principals) { User user = (User) principals.getPrimaryPrincipal(); SimpleAuthorizationInfo info = new SimpleAuthorizationInfo(); List<Role> roles = rs.findByUser(user); if(roles != null && roles.size() > 0){ for (Role role : roles) { info.addRole(role.getKeyword()); } } List<Permission> permissions = ps.findByUser(user); if(permissions != null && permissions.size() > 0) { for (Permission permission : permissions) { info.addStringPermission(permission.getKeyword()); } } return info; } @Override //认证 protected AuthenticationInfo doGetAuthenticationInfo(AuthenticationToken t) throws AuthenticationException { UsernamePasswordToken token = (UsernamePasswordToken) t; String username = token.getUsername(); User user = ud.findByUsername(username); if(user != null){ /* * 参数1:登陆标识 * 参数2:正确的密码 * 参数3:认证|授权器的名字 */ SimpleAuthenticationInfo info = new SimpleAuthenticationInfo(user, user.getPassword(), this.getClass().getName()); //ActionContext.getContext().getSession().put("loginUser", user); return info; } else { return null; } }}
После входа в систему доступ к ресурсам страницы (ресурсы страницы относятся к трем типам ресурсов и требуют разрешений),
shiroFilter (какие ресурсы настроены на один тип и какие ресурсы на три типа)
————> Диспетчер полномочий доступа, найдите диспетчер полномочий, чтобы определить, есть ли полномочия xxx (менеджер полномочий сам не может принять решение), диспетчер полномочий извлекает информацию аутентификации, сохраненную в сеансе при входе в систему ранее.
Передайте его ————> области для оценки (метод аутентификации в области вызывается при входе в систему), область запрашивает базу данных для получения разрешения и возвращает информацию о разрешении ————> диспетчеру разрешений.
Диспетчер полномочий оценивает, имеет ли он полномочия xxx в соответствии с информацией об авторизации области, и уведомляет о результате диспетчера полномочий после принятия решения.Если диспетчер полномочий ShiraFilter не имеет полномочий, он перейдет к ответу. страница.
На самом деле это дизайн простого фреймворка широ, в индивидуальном дизайне может быть небольшая ошибка, это просто тест, вы можете испытать это на себе.
Суммировать
Shiro — это полнофункциональная и простая в использовании платформа.Обобщите три основных элемента:
1.Subject2.SecurityManager3.Realms
Широ мощный, но простой и гибкий. Это относительно надежный проект под Apache, он не привязан ни к какому фреймворку или контейнеру и может работать независимо.
Итак, вы понимаете эту структуру контроля разрешений? Мы можем поделиться идеями вместе.
Официальная учетная запись Java Geek Technology создана группой технических специалистов, которые любят разработку Java и уделяют особое внимание обмену оригинальными и высококачественными статьями о Java.Если вы считаете, что наши статьи неплохие, помогите оценить, прочитать, переслать и поддержать, а также поощряйте нас делиться лучшими статьями.
Подпишитесь на официальную учетную запись, вы можете ответить на «Самородки» в фоновом режиме официальной учетной записи и получить систему знаний автора / интервью, обязательные к просмотру материалы.