Spring-boot-starter-security
Spring Boot — это фреймворк для разработки и тестирования программного обеспечения, который предоставляет разработчикам более дружественный распределённый механизм проверки прав доступа. Он значительно повышает эффективность проверки.
Перейдите к руководству пример.
<dependency>
<groupId>cn.antcore</groupId>
<artifactId>spring-boot-starter-security</artifactId>
<version>${Maven仓库最新版本}</version>
<scope>compile</scope>
</dependency>
@PostRest(value = "login", login = false)
public ReturnT<String> login(HttpSession session, String username, String password) {
// TODO 自己实现username和password的登录验证逻辑
UserDetails details = new UserDetails(10010L, "Admin");
details.setAuthority(Arrays.asList("index", "user"));
details.setRoles(Arrays.asList("admin"));
String token = ((LoginSession) session).loginSuccess(details);
return ReturnT.success(token);
}
Пример:
@GetRest(value = "logout")
public ReturnT<String> logout(HttpSession session) {
session.invalidate();
return ReturnT.success("success");
}
@GetRest(value = "logout")
public ReturnT<String> logout(HttpSession session) {
LoginSession loginSession = (LoginSession) session;
loginSession.logout();
return ReturnT.success("success");
}
UserSession — предоставляет основные методы запроса информации о текущем вошедшем в систему пользователе, такой как идентификатор пользователя, имя пользователя и другие данные. Пример:
@GetRest(authority = {"index"}, roles = "admin", condition = "#session.getUserId() == 10010L")
public ReturnT<Serializable> index(HttpSession session) {
UserSession userSession = (UserSession) session;
return ReturnT.success(userSession.getUserId());
}
Описание функции: добавление перехватчика для обеспечения того, чтобы интерфейс мог быть доступен только после входа пользователя в систему. @Login — аннотация, которая определяет, требуется ли вход для доступа к интерфейсу. Параметр value может принимать значение true или false. Значение true означает, что интерфейс требует входа в систему для доступа, а значение false означает, что доступ к интерфейсу не требует входа. Пример:
@Login(value = false)
@PostMapping(value = "login")
public ReturnT<String> login(HttpSession session, String username, String password) {
// TODO 登录逻辑
}
Описание функции: перехватчик, обеспечивающий доступ к интерфейсам только пользователям с определёнными разрешениями и ролями, а также проверку пользовательских правил. @ApiAuthorize — эта аннотация используется для проверки разрешений, ролей доступа и пользовательских правил интерфейса. Параметры value и authority определяют необходимые разрешения, а параметр roles определяет необходимые роли. Параметр condition позволяет задать пользовательское правило с использованием SpEL-выражений. Пример:
@ApiAuthorize(authority = {"index"}, roles = "admin", condition = "#session.getUserId() == 10010L")
public ReturnT<Serializable> index(HttpSession session) {
// 此接口表达的意思是:用户需要 иметь разрешение index для доступа, причём этот пользователь должен быть администратором, и, наконец, userId этого пользователя должен быть равен 10010.
// Три условия связаны отношением «и».
}
Описание функции: объединение аннотаций @RequestMapping, @Login и @ApiAuthorize в одну аннотацию для уменьшения количества аннотаций на интерфейсе. Пример:
import cn.antcore.security.web.GetRest;
import cn.antcore.security.web.PostRest;
import cn.antcore.security.web.PutRest;
import cn.antcore.security.web.DeleteRest;
import cn.antcore.security.web.OptionsRest;
import cn.antcore.security.web.PatchRest;
import cn.antcore.security.web.HeadRest;
import cn.antcore.security.web.TraceRest;
@GetRest(value = {"", "/index"}, authority = {"index"}, roles = "admin", condition = "#session.getUserId() == 10010L")
public ReturnT<Serializable> index(HttpSession session) {
// TODO 自定义逻辑
}
spring:
security:
session-time: 24h # Время истечения срока действия токена
automatic-renewal: true # Автоматическое продление токена
max-live: 1 # Максимальное количество одновременных подключений одного и того же пользователя
redis: # Конфигурация Redis
host: 127.0.0.1
port: 6379
Описание функции: ... Стратегия генерации токена в сессии и передача токена на сервер
Стратегия генерации токена:
Описание: стратегия генерации токена для распределённой сессии, по умолчанию используется Redis в качестве хранилища данных.
Интерфейс: cn.antcore.security.session.SessionIdStrategy.
Реализация: класс cn.antcore.security.session.strategy.HeaderSessionIdStrategy.
Генерация токена происходит с помощью UUID. Токен передаётся на сервер через заголовок «X-Auth-Token».
Пользователь может реализовать собственную стратегию генерации токена, реализовав интерфейс SessionIdStrategy и предоставив реализацию Spring BeanFactory для управления.
Автоматическое продление срока действия токена
Описание: сервер автоматически продлевает срок действия токена после его использования.
Интерфейс и реализация по умолчанию:
Интерфейс: cn.antcore.security.session.refresh.SessionTimeoutRefresh.
Реализация: cn.antcore.security.session.refresh.RedisSessionTimeoutRefresh.
Продление срока действия токена запускается при вызове метода getSessionId в классе SessionIdStrategy.
Можно реализовать собственный механизм автоматического продления срока действия токена, создав реализацию интерфейса SessionTimeoutRefresh и предоставив её Spring BeanFactory.
Управление количеством активных сессий пользователя
Описание: когда пользователь создаёт новый токен, проверяется количество активных сессий. Если оно превышает максимальное значение, старые сессии удаляются.
Интерфейс и реализация по умолчанию:
Интерфейс: cn.antcore.security.session.max.MaxSession.
Реализация: cn.antcore.security.session.max.MaxSessionManager.
Проверка количества активных сессий запускается при успешном входе в систему (метод loginSuccess в классе LoginSession).
Для реализации собственного механизма управления количеством активных сессий необходимо создать реализацию интерфейса MaxSession и предоставить её Spring BeanFactory.
Расширенные возможности
Перехват состояния входа:
Функциональность: перехват, запускаемый аннотацией @Login.
Интерфейс и реализация:
Перехват проверяет, вошёл ли пользователь в систему, используя метод isLogin в классе UserSession.
Перехватчик прав доступа:
Функциональность: перехват, запускаемый аннотацией @ApiAuthorize.
Интерфейс и реализация:
Права доступа проверяются в методе UserDetails.
Вы можете оставить комментарий после Вход в систему
Неприемлемый контент может быть отображен здесь и не будет показан на странице. Вы можете проверить и изменить его с помощью соответствующей функции редактирования.
Если вы подтверждаете, что содержание не содержит непристойной лексики/перенаправления на рекламу/насилия/вульгарной порнографии/нарушений/пиратства/ложного/незначительного или незаконного контента, связанного с национальными законами и предписаниями, вы можете нажать «Отправить» для подачи апелляции, и мы обработаем ее как можно скорее.
Комментарии ( 0 )