GitHub: https://github.com/johntostring/spring-boot-shiro
mvn clean install
<dependency>
<groupId>com.millinch</groupId>
<artifactId>spring-boot-shiro-starter</artifactId>
<version>1.0.0</version>
</dependency>
Официально рекомендовано использовать YAML для конфигураций, также рекомендую использовать YAML, так как при конфигурировании filter-chain-definitions
, обычно требуется сохранение последовательности (наследие от Hashtable).
Далее будут указаны значения по умолчанию для конфигураций, вы можете настроить только те параметры, которые вам необходимы.
Подробное описание использования Spring Boot можно найти в официальной документации, либо просмотреть примеры проектов на GitHub.
Сначала предоставляется конфигурация JdbcRealm по умолчанию, если это не удовлетворяет ваши требования, то следует настроить свой Realm:
shiro:
realm-class: #по умолчанию пустое значение, полное имя класса com.your.company.YourRealm
1. Конфигурация DataSource
Пример для MySQL, после добавления зависимости JDBC-драйвера, настройте DataSource:
spring:
datasource:
url: jdbc:mysql://localhost:3306/yourdbname
username: #вы знаете
password: #вы знаете
driver-class-name: com.mysql.jdbc.Driver
2. Включение JdbcRealm
Установите shiro.realm.jdbc.enabled
в true
, чтобы избежать поиска пользовательского realm-class
, затем настройте SQL запросы.
Конфигурация по умолчанию и её описание:
shiro:
realm:
jdbc:
enabled: true
authentication-query: SELECT password FROM sys_user where user_name = ? #получение пароля по имени пользователя
salt: no_salt #допустимые значения: no_salt, crypt(не реализовано в исходниках), column(второй столбец SQL запроса), external(требуется переопределение метода getSaltForUser())
user-roles-query: SELECT r.code
FROM sys_user_role ur
LEFT JOIN sys_role r ON r.id = ur.role_id
LEFT JOIN sys_user u ON ur.user_id = u.id AND u.user_name = ? #получение ролей по имени пользователя
permissions-query: SELECT re.permission
FROM sys_role_resource rr
LEFT JOIN sys_resource re ON rr.resource_id = re.id
LEFT JOIN sys_role r ON rr.role_id = r.id
WHERE r.code = ? #получение прав доступа по роли
login-url: /login #URL входа
success-url: /index #URL успешной авторизации
unauthorized-url: /unauthorized #URL перенаправления при попытке доступа к защищённому ресурсу
sign-in:
user-param: username #параметр имени пользователя
password-param: password #параметр пароля
remember-me-param: rememberMe #параметр запомнить меня
hash-iterations: 1 #количество итераций хэширования, должно быть хотя бы 1
hash-algorithm-name: MD5 #название алгоритма хэширования, допустимые значения: MD2/SHA-1/SHA-256/SHA-384/SHA-512
filter-chain-definitions: #значение по умолчанию пустое, обычно следующее:
/login: authc
/logout: logout
/favicon.ico: anon
/index: anon
/assets/**: anon
/**: authc
shiro.cookie.cipher-key= #ключ шифрования для симметричного шифрования (по умолчанию), если пустое значение, Shiro автоматически предоставляет ключ
shiro.cookie.decryption-cipher-key= #обязательно для асимметричного шифрования
shiro.cookie.encryption-cipher-key= #обязательно для асимметричного шифрования
shiro.cookie.name=rememberMe
shiro.cookie.http-only=true #рекомендуется установить в true
shiro.cookie.max-age=31536000 #1 год
shiro.cookie.secure=false #защищённые cookies
shiro.cookie.version=-1
shiro.session.active-sessions-cache-name=shiro-activeSessionCache
shiro.session.delete-invalid-sessions=true
shiro.session.global-session-timeout=36000 #время жизни сессии, по умолчанию 1 час
shiro.session.id-generator=org.apache.shiro.session.mgt.eis.JavaUuidSessionIdGenerator #можно указать своё реализование
shiro.session.validation-interval=36000 #период проверки сессий каждые 1 час
shiro.session.validation-scheduler-enabled=true #включено ли планирование проверки сессий
О Scheduler для проверки сессий
По умолчанию используется ExecutorServiceSessionValidationScheduler
, который является реализацией API Java Concurrency.
Если в classpath найден Quartz, будет использоваться QuartzSessionValidationScheduler
. Для этого добавьте зависимость:
<dependency>
<groupId>org.apache.shiro</groupId>
<artifactId>shiro-quartz</artifactId>
<version>${shiro.version}</version>
</dependency>
Вы также можете настроить свой SessionValidationScheduler
:
@Bean(name = "sessionValidationScheduler")
public SessionValidationScheduler yourSessionValidationScheduler() {
return new YourSessionValidationScheduler();
}
shiro.ehcache.cache-manager-config-file=classpath:org/apache/shiro/cache/ehcache/ehcache.xml #конфигурационный файл для Ehcache
CacheManager
По умолчанию используется MemoryConstrainedCacheManager
, что не рекомендуется для продакшена.
Если в classpath найден org.apache.shiro.cache.ehcache.EhCacheManager
, будет использоваться EhCacheManager. Для этого добавьте зависимость:
<dependency>
<groupId>org.apache.shiro</groupId>
<artifactId>shiro-ehcache</artifactId>
<version>${shiro.version}</version>
</dependency>
Аналогично, CacheManager может быть настроен на использование других реализаций, таких как Redis для распределенного кэша, чтобы заменить значения по умолчанию. Также могут быть настроены Bean для замены значений по умолчанию для Realm, CredentialsMatcher, SessionDAO и других компонентов.
Наконец, этот проект будет продолжать развиваться, демонстрационный проект будет создан в ближайшее время. Любые недочёты просьба сообщать.
Вы можете оставить комментарий после Вход в систему
Неприемлемый контент может быть отображен здесь и не будет показан на странице. Вы можете проверить и изменить его с помощью соответствующей функции редактирования.
Если вы подтверждаете, что содержание не содержит непристойной лексики/перенаправления на рекламу/насилия/вульгарной порнографии/нарушений/пиратства/ложного/незначительного или незаконного контента, связанного с национальными законами и предписаниями, вы можете нажать «Отправить» для подачи апелляции, и мы обработаем ее как можно скорее.
Опубликовать ( 0 )