В каталоге samples/ лежат два работающих приложения; вместе с GrantForge они покрыты сквозными тестами и служат лучшим ориентиром при интеграции.
| Пример | Порт | Что демонстрирует |
|---|---|---|
samples/shop |
19081 | Вход из браузера в кросс-доменном режиме с публичным клиентом + PKCE; кнопки показываются по ресурсам; бэкенд проверяет API с помощью @RequirePermission; @GrantForgeEntity объявляет сущность заказа, которую запрашивают областями данных «только собственные записи» и «текущий тенант» |
samples/notes |
19082 | Вход на сервере через oauth2Login Spring Security (конфиденциальный клиент + PKCE); собственный AccessTokenResolver берёт токен из сессии; «Записать заметку» показывается только тем, у кого есть на это право |
Запуск
Примеры — самостоятельные сборки Maven, зависящие от стартового пакета и JavaScript SDK этого репозитория:
./mvnw -N install
./mvnw -pl sdk/grantforge-spring-boot-starter install
(cd sdk/grantforge-js && pnpm install && pnpm build)
./mvnw -f samples/pom.xml packageВся конфигурация примеров задаётся переменными окружения:
| Переменная | Описание |
|---|---|
GRANTFORGE_URL |
Адрес GrantForge |
SHOP_BROWSER_CLIENT_ID |
Публичный клиент магазина на стороне браузера |
SHOP_CLIENT_ID / SHOP_CLIENT_SECRET |
Конфиденциальный клиент, которым бэкенд магазина объявляет сущности данных (скоуп catalog) |
SHOP_SDK_DIRECTORY |
Каталог сборки JavaScript SDK (sdk/grantforge-js/dist) |
В GrantForge для двух приложений нужно настроить ресурсы, клиентов, роли и политики данных; скрипт подготовки сквозных тестов core/grantforge-web/tests/samples/setup.ts проходит через все шаги и может служить прямым ориентиром.
Сквозные тесты
script/ci/e2e_fullstack.sh после полностековых тестов собирает и запускает оба примера и проверяет кросс-доменный вход PKCE и CORS, видимость кнопок, ответы API со статусом 403, области данных «только собственные записи» и «текущий тенант», удаление и выход из системы, а также вход на сервере в приложении для заметок. Задайте GRANTFORGE_E2E_SKIP_SAMPLES=1, чтобы пропустить этот шаг.
