1 В избранное 0 Ответвления 0

OSCHINA-MIRROR/dolyw-ShiroJwt

Присоединиться к Gitlife
Откройте для себя и примите участие в публичных проектах с открытым исходным кодом с участием более 10 миллионов разработчиков. Приватные репозитории также полностью бесплатны :)
Присоединиться бесплатно
Клонировать/Скачать
Внести вклад в разработку кода
Синхронизировать код
Отмена
Подсказка: Поскольку Git не поддерживает пустые директории, создание директории приведёт к созданию пустого файла .keep.
Loading...
README.md

ShiroJwt

License PRs Welcome GitHub stars GitHub forks

Адрес переднего плана: https://github.com/wang926454/VueStudy/tree/master/VueStudy08-JWT

Вопросы и проблемы

  1. #14 Повторяющиеся запросы могут привести к созданию нескольких токенов.
  2. #19 Проблемы с SSO в разных доменах.
  3. #29 Обработка одновременного обновления токена.

Если у вас есть вопросы, пожалуйста, отсканируйте QR-код и присоединяйтесь к группе QQ: 779168604.

Связанные проекты

Введение в проект

  1. RESTful API.
  2. Maven интегрирует Mybatis Generator (обратное проектирование).
  3. Shiro + Java-JWT реализует механизм аутентификации без сохранения состояния (токен).
  4. Шифрование пароля (с использованием AES-128 и Base64).
  5. Интеграция Redis (Jedis).
  6. Переписывание механизма кэширования Shiro (Redis).
  7. Сохранение информации о RefreshToken в Redis для управления JWT.
  8. Автоматическое обновление AccessToken на основе RefreshToken.
О реализации механизма аутентификации Shiro + Java-JWT без сохранения состояния (Token)
  1. Сначала отправьте имя пользователя и пароль на user/login, чтобы успешно получить зашифрованный AccessToken. В случае неудачи будет возвращена ошибка 401 (неверное имя пользователя или пароль).
  2. После этого можно использовать этот AccessToken для доступа к другим ресурсам.
  3. Процесс аутентификации в основном заключается в перезаписи фильтра входа JWTFilter (BasicHttpAuthenticationFilter) Shiro для проверки наличия поля Authorization в Header запроса.
  4. Если оно присутствует, то выполняется аутентификация Shiro с помощью Token. Каждый запрос, требующий авторизации, должен содержать поле Authorization со значением AccessToken в Header. В противном случае доступ предоставляется как гостю (если доступ ограничен, гость будет заблокирован).
Об использовании AES-128 + Base64 для шифрования паролей

Большинство проблем решается путём использования MD5 + соли. Я использую AES-128 + Base64, который шифрует пароли на основе имени пользователя и пароля, поскольку имена пользователей уникальны, поэтому проблема дублирования зашифрованных паролей не возникает.

Как интегрировать Jedis с SpringBoot

Первоначально предполагалось напрямую внедрить JedisUtil как Bean, а затем использовать его с помощью @Autowired. Однако при переписывании CustomCache Shiro невозможно внедрить JedisUtil, поэтому вместо этого используется статическая инъекция пула соединений JedisPool. JedisUtil по-прежнему вызывается статическими методами без необходимости @Autowired внедрения.

Сохранение информации RefreshToken в Redis
  1. После успешной аутентификации AccessToken содержит информацию о текущем времени и имени пользователя.
  2. Одновременно в Redis устанавливается RefreshToken, ключ которого соответствует имени пользователя, а значение — текущему времени.
  3. Теперь аутентификация требует, чтобы AccessToken был действителен, и чтобы соответствующий RefreshToken существовал в Redis, а время, указанное в RefreshToken, совпадало со временем в AccessToken. Это позволяет контролировать JWT.
  4. При повторной аутентификации новый AccessToken заменяет старый. Старый AccessToken больше не может быть использован для аутентификации, так как он не соответствует времени, указанному в соответствующем RefreshToken. Таким образом, каждый пользователь может использовать только последний AccessToken для аутентификации.
  5. Redis также можно использовать для определения того, находится ли пользователь в сети. Удаление RefreshToken из Redis приведёт к тому, что соответствующий AccessToken перестанет работать, что позволит контролировать доступ пользователей.
Автоматическое обновление AccessToken с использованием RefreshToken
  1. Срок действия AccessToken составляет 5 минут (настраивается в файле конфигурации). Срок действия RefreshToken составляет 30 минут (также настраивается).
  2. Через 5 минут после аутентификации AccessToken становится недействительным. Попытка использовать AccessToken вызовет исключение TokenExpiredException.
  3. Затем проверяется необходимость обновления AccessToken. Проверяется наличие соответствующего RefreshToken в Redis. Также проверяется, совпадает ли время в RefreshToken со временем в просроченном AccessToken.
  4. Если оба условия выполняются, происходит обновление AccessToken. Устанавливается срок действия 5 минут (конфигурируется), время устанавливается на текущее время, а время в RefreshToken обновляется до текущего времени. Срок действия RefreshToken устанавливается равным 30 минутам (конфигурируется).
  5. Обновлённый AccessToken сохраняется в заголовке Response Authorization и возвращается (фронтенд получает и заменяет его, используя новый AccessToken при следующем запросе).

Архитектура программного обеспечения

  1. SpringBoot + ядро Mybatis.
  2. Плагин PageHelper + плагин универсального Mapper.
  3. Механизм аутентификации Shiro + Java-JWT.
  4. Платформа кеширования Redis (Jedis).

Руководство по установке

  1. Пароль базы данных по умолчанию — root. Измените его при необходимости, изменив файл конфигурации application.yml. 解压后执行 src\main\resources\sql\MySQL.sql 脚本创建数据库和表

  2. Redis 需要自行安装 Redis 服务, 端口密码默认

  3. SpringBoot 直接启动即可, 测试工具 PostMan

Использование

Mybatis Generator использование (можно визуализировать и настроить шаблоны для быстрого создания базового кода: https://github.com/wang926454/ViewGenerator)

Сначала настройте файл src\main\resources\generator\generatorConfig.xml (все настройки по умолчанию находятся в папке reverse под этим пакетом), затем выполните команду в командной строке в каталоге уровня pom.xml (предполагается, что вы настроили mvn) (в IDEA можно напрямую дважды щёлкнуть «Plugins» в окне Maven для выполнения):

mvn mybatis-generator:generate
PostMan использование (получение и использование токена)
  1. Сначала установите Content-Type как application/json

  2. Затем введите параметры запроса: имя пользователя и пароль.

  3. Выполните запрос, и если он успешен, то...

  4. Нажмите на заголовок Authorization, чтобы получить токен.

  5. Для доступа к ресурсам с правами доступа используйте токен в заголовке Authorization.

  6. Токен автоматически обновляется при истечении срока действия.

Сборка

  1. Спасибо SmithCruise за Shiro+JWT+Spring Boot Restful простое руководство: https://www.jianshu.com/p/f37f8c295057.
  2. Спасибо Wang Hongyu за [Shiro введение] (один) использование Redis в качестве менеджера кэша: https://blog.csdn.net/why15732625998/article/details/78729254.
  3. Спасибо 🐴 Feeder за springboot (семь). Интеграция springboot с jedis для реализации кэширования redis: http://www.cnblogs.com/GodHeng/p/9301330.html.
  4. Спасибо W_Z_W_888 за три метода внедрения статических переменных spring и их примечания: https://blog.csdn.net/W_Z_W_888/article/details/79979103.
  5. Спасибо Tianjiangyun за реализацию разбивки на страницы таблицы Vue2.0+ElementUI+PageHelper: https://blog.csdn.net/u012907049/article/details/70237457.
  6. Спасибо yaxx за получение HTTP-ответа с помощью axios в Vuejs: https://segmentfault.com/a/1190000009125333.
  7. Спасибо Twilight за решение проблемы обновления токена JWT: https://segmentfault.com/a/1190000013151506.
  8. Спасибо chuhx за настройку shiro для возврата данных json: https://blog.csdn.net/chuhx/article/details/51148877.
  9. Спасибо yidao620c за конфигурацию правил перехвата Shiro: https://github.com/yidao620c/SpringBootBucket/tree/master/springboot-jwt.

Вклад

  1. Fork этот проект.
  2. Создайте ветку Feat_xxx.
  3. Отправьте код.
  4. Создайте Pull Request.

Комментарии ( 0 )

Вы можете оставить комментарий после Вход в систему

Введение

API SpringBoot + Shiro + Java-Jwt + Redis (Jedis). Развернуть Свернуть
MIT
Отмена

Обновления (10)

все

Участники

все

Недавние действия

Загрузить больше
Больше нет результатов для загрузки
1
https://api.gitlife.ru/oschina-mirror/dolyw-ShiroJwt.git
git@api.gitlife.ru:oschina-mirror/dolyw-ShiroJwt.git
oschina-mirror
dolyw-ShiroJwt
dolyw-ShiroJwt
master