1 В избранное 0 Ответвления 0

OSCHINA-MIRROR/slacrey-api-wrap

Присоединиться к Gitlife
Откройте для себя и примите участие в публичных проектах с открытым исходным кодом с участием более 10 миллионов разработчиков. Приватные репозитории также полностью бесплатны :)
Присоединиться бесплатно
Клонировать/Скачать
Внести вклад в разработку кода
Синхронизировать код
Отмена
Подсказка: Поскольку Git не поддерживает пустые директории, создание директории приведёт к созданию пустого файла .keep.
Loading...
README.md

Защита подписей и проверка подписей серверной части

Изменения

  • Удаление зависимости от Redis в api-wrap-boot

Введение JAR-пакетов

Gradle

implementation 'com.seelyn:api-wrap-boot:{version}'

Maven

<dependency>
    <groupId>com.seelyn</groupId>
    <artifactId>api-wrap-boot</artifactId>
    <version>{version}</version>
</dependency>

Пример использования

  • Используйте аннотацию @EnableApiWrap, чтобы включить функцию API-Wrap
@SpringBootApplication
@EnableApiWrap
public class WrapWebApplication {

    public static void main(String[] args) {
        SpringApplication.run(WrapWebApplication.class, args);
    }

}
  • Добавьте аннотацию @ApiWrap к методам контроллера или самому контроллеру, аннотация также может указывать на пользовательский обработчик. Только те классы и методы, которые используют эту аннотацию, могут принимать запросы с проверкой подписей.
@ApiWrap
@PostMapping(value = "/web")
public WrapRequest<DefaultWrapData> web(@RequestBody WrapRequest<DefaultWrapData> request) {
    return request;
}
  • Создайте пользовательский класс для обработки подписей API
@ApiWrap(value=CustomWrapHandler.class)
Класс CustomWrapHandler должен реализовать интерфейс WrapHandler
  • Класс WrapRequest<DefaultWrapData> является унифицированным классом для проверки подписей API, где типовой параметр DefaultWrapData должен расширяться от базового класса WrapData.
public class WrapRequest<T extends WrapData> {

    private String appKey;
    private String signature;
    private long timestamp;
    private int nonce;
    private T data;
    // setter getter omitted...
}
import com.seelyn.apiwrap.WrapData;
import com.seelyn.apiwrap.annotation.SignIgnore;

// Класс CustomWrapHandler должен реализовать интерфейс WrapHandler
import com.seelyn.apiwrap.WrapData;
import com.seelyn.apiwrap.annotation.SignIgnore;
``````java
public class DefaultWrapData extends WrapData {

    // Annotation @SignIgnore is used to ignore the attribute when creating a signature
    @SignIgnore
    private String name;
    private String url;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getUrl() {
        return url;
    }

    public void setUrl(String url) {
        this.url = url;
    }
}
  • Save the keys appKey and appSecret for request verification
@Autowired
private WrapStore wrapStore;

// Saving the secret key
wrapStore.putSecret(appKey, appSecret);
  • Configuration file
#===========api wrap===========
# Application key, if the user does not specify it themselves, this one will be used
api.wrap.secret=testjjhdsa
# In seconds, the difference between the request time and server time should not exceed 300 seconds
api.wrap.legal-time=300
# If there is no Redis configuration, wrapStore will use local storage
# If Redis configuration is specified, wrapStore will use Redis
#===========api wrap redis=============
spring.redis.host=localhost
spring.redis.port=6379
spring.redis.database=0
  • If there is no Redis configuration, wrapStore uses local storage
  • If Redis configuration is specified, wrapStore uses Redis
  • Client-side signing utility system
### Gradle

implementation 'com.seelyn:api-wrap-client:{версия}'

### Maven
com.seelyn api-wrap-client {версия} ``` ## Инструкция по использованию ``` DefaultWrapData wrapData = new DefaultWrapData(); WrapClient wrapClient = WrapClient.create(ключ_приложения, секрет_приложения); WrapRequest запрос = wrapClient.wrap(wrapData); // запрос - объект с подписью информации ```# Расширение серверной части ## Расширение WrapStore
@Service
class CustomWrapStore extends RedisWrapStore {
    
}

Наследование от класса RedisWrapStore или реализация интерфейса WrapStore позволяет вам создать собственный интерфейс хранения пакетов. Система автоматически использует вашу реализацию WrapStore.

Расширение WrapHandler

Создание CustomWrapHandler

// Создание CustomWrapHandler, использование @Component для управления через Spring
@Component
public class CustomWrapHandler implements WrapHandler {
    @Override
    public String getAppSecret(String appKey) {
        return null;
    }

    @Override
    public String getSignature(String appKey, WrapRequest<WrapData> request) {
        return null;
    }

    @Override
    public void isLegalTime(long timestamp) {

    }

    @Override
    public void isReplayAttack(String appKey, long timestamp, int nonce, String signature) {

    }
}

Использование CustomWrapHandler

// Указание типа CustomWrapHandler.class в ApiWrap, система будет использовать соответствующий экземпляр из Spring
@ApiWrap(value = CustomWrapHandler.class)
@PostMapping(value = "/web")
public WrapRequest<DefaultWrapData> custom(@RequestBody WrapRequest<DefaultWrapData> request) {
    return request;
}

Комментарии ( 0 )

Вы можете оставить комментарий после Вход в систему

Введение

Инструмент для проверки подписи API, простой в использовании. https://github.com/slacrey/api-wrap Развернуть Свернуть
Apache-2.0
Отмена

Обновления

Пока нет обновлений

Участники

все

Недавние действия

Загрузить больше
Больше нет результатов для загрузки
1
https://api.gitlife.ru/oschina-mirror/slacrey-api-wrap.git
git@api.gitlife.ru:oschina-mirror/slacrey-api-wrap.git
oschina-mirror
slacrey-api-wrap
slacrey-api-wrap
master