ShiroJwt
Адрес переднего плана: https://github.com/wang926454/VueStudy/tree/master/VueStudy08-JWT
Если у вас есть вопросы, пожалуйста, отсканируйте QR-код и присоединяйтесь к группе QQ: 779168604.
- Сначала отправьте имя пользователя и пароль на user/login, чтобы успешно получить зашифрованный AccessToken. В случае неудачи будет возвращена ошибка 401 (неверное имя пользователя или пароль).
- После этого можно использовать этот AccessToken для доступа к другим ресурсам.
- Процесс аутентификации в основном заключается в перезаписи фильтра входа JWTFilter (BasicHttpAuthenticationFilter) Shiro для проверки наличия поля Authorization в Header запроса.
- Если оно присутствует, то выполняется аутентификация Shiro с помощью Token. Каждый запрос, требующий авторизации, должен содержать поле Authorization со значением AccessToken в Header. В противном случае доступ предоставляется как гостю (если доступ ограничен, гость будет заблокирован).
Большинство проблем решается путём использования MD5 + соли. Я использую AES-128 + Base64, который шифрует пароли на основе имени пользователя и пароля, поскольку имена пользователей уникальны, поэтому проблема дублирования зашифрованных паролей не возникает.
Первоначально предполагалось напрямую внедрить JedisUtil как Bean, а затем использовать его с помощью
@Autowired
. Однако при переписывании CustomCache Shiro невозможно внедрить JedisUtil, поэтому вместо этого используется статическая инъекция пула соединений JedisPool. JedisUtil по-прежнему вызывается статическими методами без необходимости@Autowired
внедрения.
- После успешной аутентификации AccessToken содержит информацию о текущем времени и имени пользователя.
- Одновременно в Redis устанавливается RefreshToken, ключ которого соответствует имени пользователя, а значение — текущему времени.
- Теперь аутентификация требует, чтобы AccessToken был действителен, и чтобы соответствующий RefreshToken существовал в Redis, а время, указанное в RefreshToken, совпадало со временем в AccessToken. Это позволяет контролировать JWT.
- При повторной аутентификации новый AccessToken заменяет старый. Старый AccessToken больше не может быть использован для аутентификации, так как он не соответствует времени, указанному в соответствующем RefreshToken. Таким образом, каждый пользователь может использовать только последний AccessToken для аутентификации.
- Redis также можно использовать для определения того, находится ли пользователь в сети. Удаление RefreshToken из Redis приведёт к тому, что соответствующий AccessToken перестанет работать, что позволит контролировать доступ пользователей.
- Срок действия AccessToken составляет 5 минут (настраивается в файле конфигурации). Срок действия RefreshToken составляет 30 минут (также настраивается).
- Через 5 минут после аутентификации AccessToken становится недействительным. Попытка использовать AccessToken вызовет исключение TokenExpiredException.
- Затем проверяется необходимость обновления AccessToken. Проверяется наличие соответствующего RefreshToken в Redis. Также проверяется, совпадает ли время в RefreshToken со временем в просроченном AccessToken.
- Если оба условия выполняются, происходит обновление AccessToken. Устанавливается срок действия 5 минут (конфигурируется), время устанавливается на текущее время, а время в RefreshToken обновляется до текущего времени. Срок действия RefreshToken устанавливается равным 30 минутам (конфигурируется).
- Обновлённый AccessToken сохраняется в заголовке Response Authorization и возвращается (фронтенд получает и заменяет его, используя новый AccessToken при следующем запросе).
Пароль базы данных по умолчанию — root. Измените его при необходимости, изменив файл конфигурации application.yml. 解压后执行 src\main\resources\sql\MySQL.sql 脚本创建数据库和表
Redis 需要自行安装 Redis 服务, 端口密码默认
SpringBoot 直接启动即可, 测试工具 PostMan
Сначала настройте файл src\main\resources\generator\generatorConfig.xml (все настройки по умолчанию находятся в папке reverse под этим пакетом), затем выполните команду в командной строке в каталоге уровня pom.xml (предполагается, что вы настроили mvn) (в IDEA можно напрямую дважды щёлкнуть «Plugins» в окне Maven для выполнения):
mvn mybatis-generator:generate
Сначала установите Content-Type как application/json
Затем введите параметры запроса: имя пользователя и пароль.
Выполните запрос, и если он успешен, то...
Нажмите на заголовок Authorization, чтобы получить токен.
Для доступа к ресурсам с правами доступа используйте токен в заголовке Authorization.
Токен автоматически обновляется при истечении срока действия.
Вы можете оставить комментарий после Вход в систему
Неприемлемый контент может быть отображен здесь и не будет показан на странице. Вы можете проверить и изменить его с помощью соответствующей функции редактирования.
Если вы подтверждаете, что содержание не содержит непристойной лексики/перенаправления на рекламу/насилия/вульгарной порнографии/нарушений/пиратства/ложного/незначительного или незаконного контента, связанного с национальными законами и предписаниями, вы можете нажать «Отправить» для подачи апелляции, и мы обработаем ее как можно скорее.
Комментарии ( 0 )