SmartMVC
Все документы
Руководство
Возможности
Аутентификация
Пример
Справочник
  • 简体中文
  • English
  • 日本語
  • Русский
GitHub
Все документы
Руководство
Возможности
Аутентификация
Пример
Справочник
  • 简体中文
  • English
  • 日本語
  • Русский
GitHub
  • Справочник

    • Справочник настроек
    • Краткий справочник API

Краткий справочник API

Аннотации

@Auth

Может применяться к классу контроллера, методу или составной аннотации.

@Auth(
    roles = { "admin", "auditor" },
    permissions = { "report:read" },
    mode = AuthMode.ANY
)
ЧленТипПо умолчаниюНазначение
rolesString[]{}Необходимые роли
permissionsString[]{}Необходимые именованные разрешения
modeAuthModeALLТребовать все или любое из нескольких значений отдельно для ролей и разрешений

@Anonymous

Помечает класс или метод, для которого аутентификация не требуется. Определение на методе имеет приоритет; данные текущего пользователя не создаются.

AuthPrincipal<T>

Неизменяемые данные аутентифицированного пользователя:

МетодВозвращаемое значение
getId()Стабильный идентификатор пользователя
getUser()Пользовательский объект приложения; может быть null
getRoles()Неизменяемый набор ролей
getPermissions()Неизменяемый набор разрешений
getAttributes()Неизменяемая Map дополнительных атрибутов
getAttribute(name)Отдельный дополнительный атрибут

Конструктор защитно копирует наборы и Map. Значение id не может быть пустым.

CurrentAuth

Синглтон-фасад под управлением Spring, использующий контекст потока запроса:

currentAuth.isAuthenticated();
currentAuth.getUserId();
currentAuth.getUser(AppUser.class);
currentAuth.getRoles();
currentAuth.getPermissions();
currentAuth.hasRole("admin");
currentAuth.hasPermission("GET", "/api/users/42");

Если текущий пользователь не установлен, requirePrincipal() выбрасывает IllegalStateException. Обычно его вызывают только на пути, уже защищённом @Auth.

AuthInterceptor<T>

Необходимо реализовать:

AuthPrincipal<T> authenticate(String token, HttpServletRequest request);

Дополнительно можно переопределить resolveToken, authorize, bind, clear и resolveRequestPath. Когда приложение предоставляет такой бин, автоматически настроенный PermitAllAuthInterceptor перестаёт применяться.

ApiResponse<T>

Поля: success, code, message, data, timestamp.

ApiResponse.success(data);
ApiResponse.success("created", data);
ApiResponse.failure("ORDER_CLOSED", "Order is already closed");
ApiResponse.failure("INVALID_LINES", "Some lines are invalid", details);

PageResult<T>

new PageResult<>(items, total, page, pageSize);

Поля: items, total, page, pageSize. Метод getTotalPages() вычисляет общее число страниц с округлением вверх.

Матрица исключений

Все исключения наследуют SmartMvcException и не создают стек вызовов.

ИсключениеcodeHTTP
BadRequestExceptionBAD_REQUEST400
ParameterValidationExceptionPARAMETER_VALIDATION_FAILED400
UnauthorizedExceptionUNAUTHORIZED401
ForbiddenExceptionFORBIDDEN403
ResourceNotFoundExceptionRESOURCE_NOT_FOUND404
MethodNotAllowedExceptionMETHOD_NOT_ALLOWED405
NotAcceptableExceptionNOT_ACCEPTABLE406
RequestTimeoutExceptionREQUEST_TIMEOUT408
ConflictExceptionCONFLICT409
GoneExceptionGONE410
PayloadTooLargeExceptionPAYLOAD_TOO_LARGE413
UnsupportedMediaTypeExceptionUNSUPPORTED_MEDIA_TYPE415
BusinessExceptionBUSINESS_ERROR / пользовательский422
UnprocessableEntityExceptionUNPROCESSABLE_ENTITY422
LockedExceptionLOCKED423
TooManyRequestsExceptionTOO_MANY_REQUESTS429
BusinessExecutionExceptionBUSINESS_EXECUTION_FAILED500
InternalServerExceptionINTERNAL_SERVER_ERROR500
NotImplementedExceptionNOT_IMPLEMENTED501
BadGatewayExceptionBAD_GATEWAY502
ServiceUnavailableExceptionSERVICE_UNAVAILABLE503
GatewayTimeoutExceptionGATEWAY_TIMEOUT504

new BusinessException(message) использует код по умолчанию BUSINESS_ERROR. При необходимости можно передать собственный бизнес-код, сообщение и details для ожидаемого отказа, который клиент умеет распознать и обработать.

Изменить эту страницу на GitHub
Последнее обновление: 07.08.2026, 08:33
Назад
Справочник настроек