implementation 'com.seelyn:api-wrap-boot:{version}'
<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;
}
@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;
}
}
appKey
and appSecret
for request verification@Autowired
private WrapStore wrapStore;
// Saving the secret key
wrapStore.putSecret(appKey, appSecret);
#===========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
### Gradle
implementation 'com.seelyn:api-wrap-client:{версия}'
### Maven
@Service
class CustomWrapStore extends RedisWrapStore {
}
Наследование от класса RedisWrapStore
или реализация интерфейса WrapStore
позволяет вам создать собственный интерфейс хранения пакетов. Система автоматически использует вашу реализацию WrapStore
.
// Создание 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.class в ApiWrap, система будет использовать соответствующий экземпляр из Spring
@ApiWrap(value = CustomWrapHandler.class)
@PostMapping(value = "/web")
public WrapRequest<DefaultWrapData> custom(@RequestBody WrapRequest<DefaultWrapData> request) {
return request;
}
Вы можете оставить комментарий после Вход в систему
Неприемлемый контент может быть отображен здесь и не будет показан на странице. Вы можете проверить и изменить его с помощью соответствующей функции редактирования.
Если вы подтверждаете, что содержание не содержит непристойной лексики/перенаправления на рекламу/насилия/вульгарной порнографии/нарушений/пиратства/ложного/незначительного или незаконного контента, связанного с национальными законами и предписаниями, вы можете нажать «Отправить» для подачи апелляции, и мы обработаем ее как можно скорее.
Опубликовать ( 0 )