Предисловие:
В проекте 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, но и знакомит с множеством идей по дизайну разрешений, которые действительно учат людей ловить рыбу.
использованная литература
- Адрес в открытом доступе:GitHub.com/д-р Омар А/Са-…
- Официальная документация:sa-token.dev33.cn/