Adnotacje licencyjne

beanguard-client udostępnia cztery adnotacje z pakietu dev.beanguard.client.annotations do deklaratywnego zabezpieczania metod Spring Boot na podstawie treści aktywnej licencji.

@RequiresValidLicence

Blokuje metodę, jeśli aktualna licencja nie jest ważna:

import dev.beanguard.client.annotations.RequiresValidLicence;

@RequiresValidLicence
public void exportReport() {
    // wykonuje się tylko przy ważnej licencji
}

Rzuca dev.beanguard.client.exceptions.MissingOrInvalidLicence (bez wiadomości), jeśli LicenceRegistry.getStatus().isValid() zwraca false.

@RequiresLicenceFeature

Blokuje metodę, jeśli licencja nie zawiera w claims flagi o podanej nazwie ustawionej na "true":

import dev.beanguard.client.annotations.RequiresLicenceFeature;

@RequiresLicenceFeature("advanced-reports")
public void generateAdvancedReport() {
    // wymaga claims["advanced-reports"] == "true"
}

Rzuca MissingLicenceFeature z nazwą brakującej funkcji jako komunikatem — zarówno przy nieważnej licencji, jak i braku wpisu lub wartości "false" danej flagi.

@RequiresLicenceLimit

Sprawdza, czy bieżące użycie danego limitu (śledzone przez UsageRegistry) nie osiągnęło jeszcze wartości z licencji, a po wykonaniu metody zwiększa licznik użycia o 1:

import dev.beanguard.client.annotations.RequiresLicenceLimit;

@RequiresLicenceLimit("active-users")
public void createUser(UserRequest request) {
    // wykonuje się tylko, gdy usage < limit z claims["active-users"]
    // po wykonaniu: usage rośnie o 1
}

Limit to liczba całkowita zapisana jako string w claims (np. claims["active-users"] = "10") — brak wpisu w claims traktowany jest jak limit 0. Przekroczenie rzuca LicenceLimitExceeded z komunikatem w formacie "<nazwa>:<aktualne użycie>:<limit>".

@DecreasesLicenceLimit

Zmniejsza licznik użycia danego limitu po wykonaniu metody — użyj przy usuwaniu zasobu liczonego przez @RequiresLicenceLimit:

import dev.beanguard.client.annotations.DecreasesLicenceLimit;

@DecreasesLicenceLimit("active-users")
public void deleteUser(UUID userId) {
    // po wykonaniu: usage maleje o 1
}

Śledzenie użycia limitów

Domyślnie UsageRegistry liczy użycie w pamięci — licznik resetuje się przy restarcie aplikacji. Jeśli potrzebujesz trwałego licznika (np. w bazie danych), dostarcz własny bean implementujący dev.beanguard.client.usage.UsageRegistry. To jedyny, obok BeanGuardConfiguration, interfejs pozostawiony nieobfuskowany w beanguard-client, więc możesz go bezpiecznie zaimplementować we własnym kodzie.

Obsługa wyjątków

Wszystkie trzy wyjątki — MissingOrInvalidLicence, MissingLicenceFeature, LicenceLimitExceeded — to RuntimeException rzucane w Twojej aplikacji. Przechwyć je własnym @ControllerAdvice lub podobnym mechanizmem, żeby zwrócić użytkownikowi czytelny komunikat zamiast błędu 500.

Czy ta strona była pomocna?