До свидания, Широ! Я выбираю Sa-Token для аутентификации авторизации: просто и элегантно!

Java задняя часть
До свидания, Широ! Я выбираю Sa-Token для аутентификации авторизации: просто и элегантно!

Предисловие:

В проекте JavaWeb аутентификация и авторизация являются важными функциями.Более традиционные фреймворки включают Shiro, SpringSecurity и т. д. Эти фреймворки не очень просты в использовании, когда «разделение внешнего и внутреннего интерфейса» стало мейнстримом.Меньший код совместимости может быть интегрированным.

Фреймворк, который я рекомендую вам сегодня, — это Sa-Token, который позволяет нам очень элегантно интегрировать функцию аутентификации!

Адрес с открытым исходным кодом на GitHub:GitHub.com/д-р Омар А/Са-…

Внедрение Sa-Token

Sa-TokenЭто облегченная среда аутентификации разрешений Java, которая в основном решает:登录认证,权限认证,Session会话,单点登录,OAuth2.0,微服务网关鉴权И ряд вопросов, связанных с разрешениями.

Дизайн API Sa-Token очень прост, насколько он прост? Взяв в качестве примера аутентификацию при входе в систему, вам нужно всего лишь:

// 在登录时写入当前会话的账号id
StpUtil.login(10001);

// 然后在需要校验登录处调用以下方法:
// 如果当前会话未登录,这句代码会抛出 `NotLoginException` 异常
StpUtil.checkLogin();

На данный момент мы завершили аутентификацию входа с помощью Sa-Token!

В это время ваша головка может быть полна вопросительных знаков, неужели все так просто? Как насчет пользовательских Realms? А глобальные фильтры? Разве я не должен писать различные файлы конфигурации?

Правильно, в Sa-Token аутентификация входа настолько проста, что не требуется никаких сложных предварительных действий, только этот простой вызов API может завершить аутентификацию входа в сеанс!

Когда вам надоест SpringSecurity, Shiro и другие фреймворки, вы поймете, насколько прост и элегантен дизайн API Sa-Token по сравнению с этими традиционными старыми фреймворками!

Пример аутентификации разрешения (только сuser:addТолько сессия с разрешением может войти в запрос)

@SaCheckPermission("user:add")
@RequestMapping("/user/insert")
public String insert(SysUser user) {
	// ...
	return "用户增加";
}

Выключить учетную запись в автономном режиме (она будет отключена, когда другая сторона снова получит доступ к системе).NotLoginExceptionаномальный)

// 使账号id为 10001 的会话强制注销登录
StpUtil.logoutByLoginId(10001);

В Sa-Token большинство функций можноодна строка кодаЗаканчивать:

StpUtil.login(10001);   // 标记当前会话登录的账号id
StpUtil.getLoginId();   // 获取当前会话登录的账号id
StpUtil.isLogin();   // 获取当前会话是否已经登录, 返回true或false
StpUtil.logout();   // 当前会话注销登录
StpUtil.logoutByLoginId(10001);   // 让账号为10001的会话注销登录(踢人下线)
StpUtil.hasRole("super-admin");   // 查询当前账号是否含有指定角色标识, 返回true或false
StpUtil.hasPermission("user:add");   // 查询当前账号是否含有指定权限, 返回true或false
StpUtil.getSession();   // 获取当前账号id的Session
StpUtil.getSessionByLoginId(10001);   // 获取账号id为10001的Session
StpUtil.getTokenValueByLoginId(10001);   // 获取账号id为10001的token令牌值
StpUtil.login(10001, "PC");   // 指定设备标识登录,常用于“同端互斥登录”
StpUtil.logoutByLoginId(10001, "PC");   // 指定设备标识进行强制注销 (不同端不受影响)
StpUtil.openSafe(120);   // 在当前会话开启二级认证,有效期为120秒
StpUtil.checkSafe();   // 校验当前会话是否处于二级认证有效期内,校验失败会抛出异常
StpUtil.switchTo(10044);   // 将当前会话身份临时切换为其它账号

Даже если вы не запускаете тесты, вы можете ожидать, что подавляющее большинство будет использовать API.

Список функций Sa-Token

  • аутентификация входа—— Односторонний вход, многосторонний вход, односторонний взаимоисключающий вход, бесплатный вход в течение семи дней
  • Авторизация аутентификации—— Аутентификация авторитета, аутентификация роли, вторичная аутентификация сеанса
  • Сеанс сеанса—— Полный общий сеанс, односторонний эксклюзивный сеанс, пользовательский сеанс
  • выгнать кого-либо из сети—— Исключение людей из сети в соответствии с идентификатором учетной записи, удаление людей из сети в соответствии со значением токена
  • Блокировка аккаунта—— Указать количество дней до бана, навсегда банить, установить время разблокировки
  • Расширение сохраняемого слоя—— Его можно интегрировать с профессиональным промежуточным ПО для кэширования, таким как Redis и Memcached, и данные не будут потеряны после перезапуска.
  • Распределенный сеанс—— Предоставление двух распределенных сеансовых решений для интеграции jwt и общего центра обработки данных.
  • Аутентификация шлюза микросервисов—— Аутентификация перехвата маршрута для распространенных шлюзов, таких как Gateway, ShenYu, Zuul и т. д.
  • войти—— Встроенные три режима единого входа: независимо от того, является ли он междоменным, является ли общий доступ к Redis или нет, это можно сделать
  • аутентификация OAuth2.0—— На основе стандарта RFC-6749, авторизация и аутентификация стандартного процесса OAuth2.0, поддержка режима openid
  • Вторичная сертификация—— Повторная аутентификация на основе входа в систему для обеспечения безопасности
  • Автономный Redis- Отдельный кеш разрешений от бизнес-кэша
  • Временная проверка токена—— Решить краткосрочную проблему авторизации токена
  • Выдавать себя за чужой аккаунт—— Работайте с любыми данными о статусе пользователя в режиме реального времени
  • Временное переключение личности- Временно переключить идентификатор сеанса на другую учетную запись
  • Разделение на перед и зад—— ПРИЛОЖЕНИЕ, апплет и другие терминалы, не поддерживающие файлы cookie
  • Взаимоисключающий вход на одном конце—— Как и QQ, мобильный компьютер находится в сети одновременно, но два мобильных телефона взаимоисключающие.
  • Система аутентификации с несколькими учетными записями—— Например, таблица пользователя и таблица администратора проекта торгового центра аутентифицируются отдельно.
  • Причудливая генерация токенов—— Встроенные шесть стилей токенов, а также: индивидуальная стратегия генерации токенов, настраиваемый префикс токена.
  • Аннотированная аутентификация— Элегантно отделить аутентификацию от бизнес-кода
  • Аутентификация перехвата маршрута—— В соответствии с перехватом маршрута и аутентификацией его можно адаптировать к спокойному режиму.
  • Авто-обновление—— Обеспечить две стратегии истечения срока действия токена, которые можно гибко использовать и автоматически продлевать.
  • управление сеансом—— Обеспечьте удобный и гибкий интерфейс запроса сеанса
  • режим запомни меня—— Адаптировать к режиму [запомнить меня], перезапустить браузер без проверки
  • шифрование пароля—— Обеспечить модуль шифрования паролей, который может быстро шифровать MD5, SHA1, SHA256, AES, RSA
  • глобальный слушатель—— Выполнение некоторых АОП-операций во время ключевых операций, таких как вход пользователя в систему, выход из нее и удаление с линии.
  • из коробки—— Предоставляет стандартные начальные пакеты интеграции с веб-инфраструктурой, такие как SpringMVC, WebFlux и т. д., действительно готовые к использованию.

Единый вход и OAuth2.0

С помощью Sa-Token мы можем легко создать центр аутентификации с единым входом:

/**
 * Sa-Token-SSO Server端 Controller 
 */
@RestController
public class SsoServerController {
    // SSO-Server端:处理所有SSO相关请求 
    @RequestMapping("/sso/*")
    public Object ssoRequest() {
        return SaSsoHandle.serverRequest();
    }
}

Точно так же мы можем легко создать центр аутентификации OAuth2.0:

/**
 * Sa-Token-OAuth2.0 Server端 Controller 
 */
@RestController
public class SaOAuth2ServerController {
    // SSO-Server端:处理所有SSO相关请求 
    @RequestMapping("/oauth2/*")
    public Object request() {
        return SaSsoHandle.serverRequest();
    }
}

Подробный код см. во введении на официальном сайте фреймворка.

Суммировать

Из приведенных выше примеров видно, что Sa-Token учитывает какПростой,всестороннийДва преимущества: это отличный фреймворк, с которого стоит начать.

В то же время на его официальном сайте есть очень подробная документация, которая не только знакомит с фреймворком Sa-Token, но и знакомит с множеством идей по дизайну разрешений, которые действительно учат людей ловить рыбу.

官方文档

использованная литература