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 обычно требуется сохранить последовательность, что невозможно при использовании properties (наследуется от 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 (получение salt из второй колонки SQL-запроса), external (требуется наследование JdbcRealm и переопределение 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 # рекомендуется включить shiro.cookie.max-age=31536000 # 1 год shiro.cookie.secure=false # безопасная передача куки shiro.cookie.version=-1
shiro.session.active-sessions-cache-name=shiro-acciveSessionCache 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 # включить планировщик проверки сессии
**О планировщике для проверки сессии**
По умолчанию используется `ExecutorServiceSessionValidationScheduler`, который реализован с использованием API пакета `java.util.concurrent`.
Если в classpath найден `Quartz`, то используется `QuartzSessionValidationScheduler`. Для этого необходимо добавить зависимость:
Также можно настроить собственный 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 или других распределенных кэшей, чтобы заменить стандартную конфигурацию. Аналогично можно настроить `Realm`, `CredentialsMatcher`, `SessionDAO` и другие компоненты, используя Bean.**Наконец, работа будет продолжена, и я найду время, чтобы сделать демо. В случае недостатков****Наконец, работа будет продолжена, а также я найду время, чтобы сделать демонстрацию. В случае недостатков, пожалуйста, сообщите об этом.**
Вы можете оставить комментарий после Вход в систему
Неприемлемый контент может быть отображен здесь и не будет показан на странице. Вы можете проверить и изменить его с помощью соответствующей функции редактирования.
Если вы подтверждаете, что содержание не содержит непристойной лексики/перенаправления на рекламу/насилия/вульгарной порнографии/нарушений/пиратства/ложного/незначительного или незаконного контента, связанного с национальными законами и предписаниями, вы можете нажать «Отправить» для подачи апелляции, и мы обработаем ее как можно скорее.
Комментарии ( 0 )