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

OSCHINA-MIRROR/slacrey-api-wrap

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

Серверная безопасность: подпись и проверка

Список изменений

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

Добавление jar-пакета

Gradle

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

Maven

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

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

  • Включите API Wrap с помощью аннотации EnableApiWrap.
@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 — это стандартный класс запроса на проверку подписи, где T расширяет класс WrapData.
public class WrapRequest<T extends WrapData> {

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

public class DefaultWrapData extends WrapData {

    // SignIgnore 注解标识标识忽略属性用于签名
    @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;
    }
}
  • Храните ключи appKey и appSecret для проверки запросов.
@Autoware
private WrapStore wrapStore;

// 存储密钥
wrapStore.putSecret(appKey, appSecret);
  • Конфигурационный файл
#===========api wrap===========
# app密钥,若用户没有自定义,则使用此
api.wrap.secret=testjjhdsa
# 单位秒,请求时间和服务器时间不能超过300秒
api.wrap.legal-time=300
# 若没有redis配置,wrapStore为本地存储
# 若配置了redis,则wrapStore为redis存储
#===========api wrap redis=============
spring.redis.host=localhost
spring.redis.port=6379
spring.redis.database=0
  • Если Redis не настроен, wrapStore будет хранить данные локально. Если Redis настроен, wrapStore будет использовать Redis для хранения данных.

Клиентский инструмент для помощи в создании подписи

Импорт инструмента

Gradle

compile 'com.seelyn:api-wrap-client:{version}'

Maven

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

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

DefaultWrapData WrapData = new DefaultWrapData(); 
WrapClient wrapClient = WrapClient.create(appKey, appSecret);
WrapRequest<DefaultWrapData> request = wrapClient.wrap(WrapData)
// request 为带签名信息的对象

Расширение сервера

Расширение WrapStore

@Service
class CustomWrapStore extends RedisWrapStore {
    
}

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

Расширение WrapHandler

Создание CustomWrapHandler

// 自定义WrapHandler, 使用@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

// ApiWrap中指定CustomWrapHandler.class类,则系统会根据此类型从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://gitlife.ru/oschina-mirror/slacrey-api-wrap.git
git@gitlife.ru:oschina-mirror/slacrey-api-wrap.git
oschina-mirror
slacrey-api-wrap
slacrey-api-wrap
master