-
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") }
Набор утилит, структур данных, исключений без привязки к spring
ExecutionContext
- класс для хранения/получения данных из текущего потокаSecureRandomStringGenerator
- генератор случайной строки по словарюerrors.*
- базовые исключения<type>.*Utils
- утилиты для различных типов данных
Набор утилит, структур данных для spring
, без привязки к доп. модулям, таким как jpa
и web
models.*
- базовыеEntity
repositories
- утилиты и доп. интерфейсы для репозиториевliquibase.LiquibaseStart
- для подключения этого компонента необходимо объявитьliquibase.LiquibaseParams
. Указать путь к файлу с миграцией и схему, для которой эта миграция будет применяться. С помощьюLiquibaseStart
можно применить кастомную миграцию не конфликтуя с основной.EnableJpaAuditingExtra
- подключениеJpaAuditing
с поддержкой типаZoneDateTime
request.Utils
- различныеextensions
для работы сHttpServletRequest
errors.*
- исключения и типы данных дляweb
webclient.*
- классы для расширения webclient, включая логирование
configurations.DefaultSecurityConfiguration
- дефолтная реализация WebSecurity, определяет для каких request path надо ограничить доступ. Используетurl.interceptors.UrlExpressionRegistryInterceptor
для принятия решения.auditor.AuditorResolver
- служит для преобразованияprincipal
в строку, используется сJpaAuditing
auditor.SecurityAuditorAware
- резолвит имя пользователя для полей@CreatedBy
,@LastModifiedBy
. Требуется явно создать бинAuditorAware<String>
в проекте.
Утилиты для тестирования в среде spring-test
Утилиты для тестирования репозиториев
Основные компоненты логирования:
- layout
- context
- format
Встраивание системы логирования в spring
- autologging
- serializer
Interceptor для логирования запросов/ответов.
Перехватывает ошибки сервера, определяет код ошибки и возвращает их в правильный response
.
Подключается с помощью аннотации @EnableSpringExceptionHandler
Добавляет логирование в обработку ошибок.
Подключается с помощью аннотации @EnableSpringExceptionHandlerLogger
до подключения основного модуля.
Добавляет аннотации для валидации запросов.
Добавляет возможность задавать версию апи через properties
без необходимости явно указывать в каждом маппинге
Добавляет обертку для успешного ответа
Утилиты для работы с measure
Возможность задавать measure
через properties
Интерфейс для работы с гео-данными
Реализация интерфейса GeoCalculator
с помощью библиотеки spatial4j
Модуль для хранения настроек
Модуль авторизации
Добавляет поддержку 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
OAuth2 metadata support.
JWT related utilities.
Default configuration for the Spring OAuth2 resource server with JWT auth.
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-----
Disables Spring OAuth2 resource server for testing.
Amazon S3 support.
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
Интерфейсы и компоненты для модулей по обеспечению интеграции с сервисами отправки пуш-уведомлений. Является необходимой зависимостью для использования провайдеров.
Далее рассматривается пример использования подключаемых модулей-провайдеров.
@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"
)
)
)
}
}
}
Модуль по обеспечению интеграции с 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
Модуль по обеспечению интеграции с 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