|
|
||
|---|---|---|
| captcha | ||
| common | ||
| common-device | ||
| common-geo | ||
| common-geo-spatial4j-spring | ||
| common-measure | ||
| common-measure-spring | ||
| common-messaging | ||
| common-spring | ||
| common-spring-jpa | ||
| common-spring-security | ||
| common-spring-security-jpa | ||
| common-spring-test | ||
| common-spring-test-jpa | ||
| common-spring-web | ||
| common-territories | ||
| exception-handler-logger-spring-web | ||
| exception-handler-spring-security-web | ||
| exception-handler-spring-web | ||
| geoip-core | ||
| gradle/wrapper | ||
| logger | ||
| logger-spring | ||
| logger-spring-web | ||
| push-message-provider | ||
| push-message-provider-fcm | ||
| push-message-provider-hpk | ||
| push-message-provider-mock | ||
| response-wrapper-spring-web | ||
| s3-storage | ||
| security-authorization-server-core | ||
| security-authorization-server-jwt-core | ||
| security-authorization-server-oauth2-metadata | ||
| security-jwt-common | ||
| security-resource-server-custom-jwt-configuration | ||
| security-resource-server-default-jwt-configuration | ||
| security-resource-server-test-jwt-configuration | ||
| server-info-spring-web | ||
| settings-spring-jpa | ||
| user-agent | ||
| validation-spring | ||
| version-spring-web | ||
| .editorconfig | ||
| .gitignore | ||
| LICENSE | ||
| README.md | ||
| build.gradle.kts | ||
| gradle.properties | ||
| gradlew | ||
| gradlew.bat | ||
| settings.gradle.kts | ||
README.md
Modules
Installation via Gradle Composite Build
-
Add this repository as a git submodule to your project
-
Add these lines to your
settings.gradle.kts:includeBuild("Backend-common") -
Use TLK modules as dependencies of your project
dependencies { implementation("ru.touchin:common") }
common
Набор утилит, структур данных, исключений без привязки к spring
ExecutionContext- класс для хранения/получения данных из текущего потокаSecureRandomStringGenerator- генератор случайной строки по словарюerrors.*- базовые исключения<type>.*Utils- утилиты для различных типов данных
common-spring
Набор утилит, структур данных для spring, без привязки к доп. модулям, таким как jpa и web
common-spring-jpa
models.*- базовыеEntityrepositories- утилиты и доп. интерфейсы для репозиториевliquibase.LiquibaseStart- для подключения этого компонента необходимо объявитьliquibase.LiquibaseParams. Указать путь к файлу с миграцией и схему, для которой эта миграция будет применяться. С помощьюLiquibaseStartможно применить кастомную миграцию не конфликтуя с основной.EnableJpaAuditingExtra- подключениеJpaAuditingс поддержкой типаZoneDateTime
common-spring-web
request.Utils- различныеextensionsдля работы сHttpServletRequesterrors.*- исключения и типы данных дляwebwebclient.*- классы для расширения webclient, включая логирование
common-spring-security
configurations.DefaultSecurityConfiguration- дефолтная реализация WebSecurity, определяет для каких request path надо ограничить доступ. Используетurl.interceptors.UrlExpressionRegistryInterceptorдля принятия решения.auditor.AuditorResolver- служит для преобразованияprincipalв строку, используется сJpaAuditing
common-spring-security-jpa
auditor.SecurityAuditorAware- резолвит имя пользователя для полей@CreatedBy,@LastModifiedBy. Требуется явно создать бинAuditorAware<String>в проекте.
common-spring-test
Утилиты для тестирования в среде spring-test
common-spring-test-jpa
Утилиты для тестирования репозиториев
logger
Основные компоненты логирования:
- layout
- context
- format
logger-spring
Встраивание системы логирования в spring
- autologging
- serializer
logger-spring-web
Interceptor для логирования запросов/ответов.
exception-handler-spring-web
Перехватывает ошибки сервера, определяет код ошибки и возвращает их в правильный response.
Подключается с помощью аннотации @EnableSpringExceptionHandler
exception-handler-logger-spring-web
Добавляет логирование в обработку ошибок.
Подключается с помощью аннотации @EnableSpringExceptionHandlerLogger до подключения основного модуля.
validation-spring
Добавляет аннотации для валидации запросов.
version-spring-web
Добавляет возможность задавать версию апи через properties без необходимости явно указывать в каждом маппинге
response-wrapper-spring-web
Добавляет обертку для успешного ответа
common-measure
Утилиты для работы с measure
common-measure-spring
Возможность задавать measure через properties
common-geo
Интерфейс для работы с гео-данными
common-geo-spatial4j-spring
Реализация интерфейса GeoCalculator с помощью библиотеки spatial4j
settings-spring-jpa
Модуль для хранения настроек
security-authorization-server-core
Модуль авторизации
security-authorization-server-jwt-core
Добавляет поддержку jwt-токенов (создание/хранение). Для работы этого модуля требуется прописать в пропертях:
token.access:
issuer: ${app.issuer}
timeToLive: PT15M # 15 minutes
signatureAlgorithm: RS256
keyPair:
public: |
-----BEGIN PUBLIC KEY-----
-----END PUBLIC KEY-----
private: |
-----BEGIN PRIVATE KEY-----
-----END PRIVATE KEY-----
token.refresh:
length: 20
prefix: RT-
timeToLive: PT2H # 2 hours
Генерация ключей:
openssl genrsa -out private.pem 4096
openssl rsa -in private.pem -pubout -out public.pem
openssl pkcs8 -topk8 -inform PEM -in private.pem -out private_key.pem -nocrypt
cat private_key.pem
cat public.pem
security-authorization-server-oauth2-metadata
OAuth2 metadata support.
security-jwt-common
JWT related utilities.
security-resource-server-default-configuration
Default configuration for the Spring OAuth2 resource server with JWT auth.
security-resource-server-custom-configuration
Custom configuration for the Spring OAuth2 resource server with JWT auth. Requires the following properties:
token.access:
issuer: ${app.issuer}
signatureAlgorithm: RS256
keyPair:
public: |
-----BEGIN PUBLIC KEY-----
-----END PUBLIC KEY-----
security-resource-server-test-configuration
Disables Spring OAuth2 resource server for testing.
s3-storage
Amazon S3 support.
server-info-spring-web
Allow include headers with information about the server in responses
To get started you need:
- Add annotation to configuration
- Add property to yml/properties file:
server.info:
buildVersion: ${buildVersion}
- Implement ServerInfoService (optional. If you want to add other headers)
- Add dir with impl ServerInfoService in ComponentScan annotation
push-message-provider
Интерфейсы и компоненты для модулей по обеспечению интеграции с сервисами отправки пуш-уведомлений. Является необходимой зависимостью для использования провайдеров.
Далее рассматривается пример использования подключаемых модулей-провайдеров.
@Service
class PushSendingService(
private val pushMessageProviderServiceFactory: PushMessageProviderServiceFactory
) {
fun sendPushMessage() {
val yourPushToken = "pushTokenForChecking"
val platform = PlatformType.ANDROID_GOOGLE
val pushMessageProvider: PushMessageProviderService = pushMessageProviderServiceFactory.get(platform)
val result = pushMessageProvider.check( // Проверка валидности токена для обозначения целесообразности отправки
PushTokenCheck(
pushToken = yourPushToken
)
)
if (result.status == PushTokenStatus.VALID) { // Токен валиден, PushMessageProviderService интегрирован в систему
// Отправка пуш-уведомления
pushMessageProvider.send(
PushTokenMessage(
token = yourPushToken,
pushMessageNotification = PushMessageNotification(
title = "Your PushMessage",
description = "Provided by PushMessageProviderService",
imageUrl = null
),
data = mapOf(
"customKey" to "customData"
)
)
)
}
}
}
push-message-provider-fcm
Модуль по обеспечению интеграции с Firebase Cloud Messaging.
- Подключение компонентов Spring осуществляется при помощи аннотации
@EnablePushMessageProviderFcm. - Необходимо добавление конфигурации для модуля с выбранным способом хранения данных для авторизации. Пример файла конфигурации в формате yaml:
push-message-provider:
platformProviders:
ANDROID_GOOGLE:
- FCM
IOS:
- FCM
fcm:
appName: yourAppName
auth:
# Выбранный тип авторизации
client:
readTimeout: 10s
connectionTimeout: 1s
- Настраивается способ предоставления авторизации для Firebase Cloud Messaging.
А) Токен доступа из консоли Google, добавляемый в конфигурацию настроек:
auth:
token:
value: testValue
expiresAt: 2023-01-01 23:59:59 +00:00
B) Данные в файле из консоли Firebase, добавляемые в resources с обозначением пути в конфигурации настроек:
auth:
credentialsFile:
path: credentials/firebase-admin.json
C) Данные из файла консоли Firebase, добавляемые в конфигурацию настроек:
auth:
credentialsData:
type: service_account
projectId: yourProjectId
privateKeyId: yourPrivateKeyId
privateKey: |
-----BEGIN PRIVATE KEY-----
-----END PRIVATE KEY-----
clientEmail: yourClientEmail
clientId: yourClientId
authUri: yourAuthUri
tokenUri: yourTokenUri
authProviderX509CertUrl: yourAuthProviderX509CertUrl
clientX509CertUrl: yourClientX509CertUrl
push-message-provider-hpk
Модуль по обеспечению интеграции с Huawei Push Kit.
- Подключение нового провайдера осуществляется при помощи аннотации
@EnablePushMessageProviderHpk. - Для логирования запросов к сервису HPK нужно встроить в контейнер Spring собственный
WebClientLoggerиз модуляlogger-spring-webили же использовать стандартный посредством импорта конфигурации:
@Import(
SpringLoggerConfiguration::class,
SpringLoggerWebConfiguration::class
)
class YourConfiguration
- Нужно добавить конфигурацию для считывания модулем. Пример файла в формате yaml:
push-message-provider:
platformProviders:
ANDROID_HUAWEI:
- HPK
hpk:
web-services:
client-id: yourClientId
oauth:
client-secret: yourClientSecret
url: https://oauth-login.cloud.huawei.com/oauth2/v3/
http:
connection-timeout: 1s
read-timeout: 10s
write-timeout: 10s
ssl: # Опциональная структура
handshake-timeout: 1s
notify-read-timeout: 1s
notify-flush-timeout: 1s
hpk:
url: https://push-api.cloud.huawei.com/v1/
http:
connection-timeout: 1s
read-timeout: 10s
write-timeout: 10s
ssl: # Опциональная структура
handshake-timeout: 1s
notify-read-timeout: 1s
notify-flush-timeout: 1s