Skip to content

Commit

Permalink
🚀 PanGu logbook ready
Browse files Browse the repository at this point in the history
  • Loading branch information
yuebaix committed Sep 8, 2021
1 parent abda6da commit c2888ec
Show file tree
Hide file tree
Showing 11 changed files with 115 additions and 26 deletions.
Original file line number Diff line number Diff line change
@@ -1,24 +1,25 @@
package com.yuebaix.pangu.ready;

import com.yuebaix.pangu.core.PanGuCoreConst;
import com.yuebaix.pangu.ready.logbook.PanGuLogbookProperties;
import com.yuebaix.pangu.ready.logbook.PanGuLogbookWriter;
import lombok.extern.slf4j.Slf4j;
import org.springframework.boot.autoconfigure.AutoConfigureBefore;
import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
import org.springframework.boot.context.properties.EnableConfigurationProperties;
import org.springframework.context.annotation.Bean;
import org.zalando.logbook.Correlation;
import org.zalando.logbook.HttpLogWriter;
import org.zalando.logbook.Precorrelation;

import javax.annotation.PostConstruct;
import java.io.IOException;

@ConditionalOnProperty(
value = PanGuReadyStarterConst.PAN_GU_READY_STARTER_LOGBOOK_ENABLED,
havingValue = "true",
matchIfMissing = true
)
@AutoConfigureBefore(org.zalando.logbook.autoconfigure.LogbookAutoConfiguration.class)
@EnableConfigurationProperties(PanGuLogbookProperties.class)
@Slf4j
public class LogbookAutoConfiguration {

Expand All @@ -32,17 +33,4 @@ public void postInit() {
public PanGuLogbookWriter writer() {
return new PanGuLogbookWriter();
}

@Slf4j
private static final class PanGuLogbookWriter implements HttpLogWriter {
@Override
public void write(Precorrelation precorrelation, String request) throws IOException {
log.info(request);
}

@Override
public void write(Correlation correlation, String response) throws IOException {
log.info(response);
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -43,14 +43,16 @@ public void initialize(ConfigurableApplicationContext context) {
if (!PanGuReadyStarterConst.PROPERTY_FALSE.equals(
environment.getProperty(PanGuReadyStarterConst.PAN_GU_READY_STARTER_LOGBOOK_ENABLED))) {
weakPanGuPropertySource.putProperty("logbook.include", "/**");
weakPanGuPropertySource.putProperty("logbook.exclude", "");
weakPanGuPropertySource.putProperty("logbook.filter.enabled", "true");
weakPanGuPropertySource.putProperty("logbook.secure-filter.enabled", "true");
weakPanGuPropertySource.putProperty("logbook.format.style", "http");
weakPanGuPropertySource.putProperty("logbook.strategy", "default");
weakPanGuPropertySource.putProperty("logbook.minimum-status", "400");
weakPanGuPropertySource.putProperty("logbook.obfuscate.headers", "Authorization,Cookie,Set-Cookie");
weakPanGuPropertySource.putProperty("logbook.obfuscate.parameters", "access_token,password,token,mobile,email");
weakPanGuPropertySource.putProperty("logbook.obfuscate.parameters", "password,token,mobile,email");
weakPanGuPropertySource.putProperty("logbook.write.chunk-size", "1000");
weakPanGuPropertySource.putProperty("pangu.readystarter.logbook.config.obfuscate-body-params", "token,password,mobile,email");
}
//inject config here ...
}
Expand All @@ -59,6 +61,7 @@ public void initialize(ConfigurableApplicationContext context) {
/*
# swagger
springfox.documentation.swagger-ui.enabled=false
# logbook
logbook.include=/**
logbook.exclude=
Expand All @@ -70,4 +73,6 @@ public void initialize(ConfigurableApplicationContext context) {
logbook.obfuscate.headers=Authorization,Cookie,Set-Cookie
logbook.obfuscate.parameters=access_token,password,token,mobile,email
logbook.write.chunk-size=1000
pangu.readystarter.logbook.config.obfuscate-body-params=token,password,mobile,email
*/
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,10 @@ public interface PanGuReadyStarterConst {
String PAN_GU_READY_STARTER_SWAGGER_ENABLED = "pangu.readystarter.swagger.enabled";
String PAN_GU_READY_STARTER_LOGBOOK_ENABLED = "pangu.readystarter.logbook.enabled";

String PAN_GU_READY_STARTER_LOGBOOK_PREFIX = "pangu.readystarter.logbook.config";

String PAN_GU_READY_STARTER_VERSION = "1.0";

String PROPERTY_FALSE = "false";
String LOGBOOK_OBFUSCATE_CNT = "XXX";
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
package com.yuebaix.pangu.ready.logbook;

import com.yuebaix.pangu.ready.PanGuReadyStarterConst;
import org.zalando.logbook.BodyFilter;
import org.zalando.logbook.json.JsonBodyFilters;

import javax.annotation.Nullable;
import java.util.HashSet;
import java.util.Set;

/**
* only works on all levels inside the json tree and with string values
*/
public class PanGuLogbookBodyFilter implements BodyFilter {
@Override
public String filter(@Nullable String contentType, String body) {
final Set<String> properties = new HashSet<>(PanGuLogbookConfigHolder.getObfuscateBodyParams());
return JsonBodyFilters.replaceJsonStringProperty(properties, PanGuReadyStarterConst.LOGBOOK_OBFUSCATE_CNT).filter(contentType, body);
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
package com.yuebaix.pangu.ready.logbook;

import org.springframework.util.CollectionUtils;

import java.util.Collections;
import java.util.HashSet;
import java.util.Set;

public class PanGuLogbookConfigHolder {
private static Set<String> obfuscateBodyParams = Collections.emptySet();

static void set(PanGuLogbookProperties delayValue) {
if (delayValue != null && !CollectionUtils.isEmpty(delayValue.getObfuscateBodyParams())) {
obfuscateBodyParams = new HashSet<>(delayValue.getObfuscateBodyParams());
}
}

public static Set<String> getObfuscateBodyParams() {
return obfuscateBodyParams;
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
package com.yuebaix.pangu.ready.logbook;

import com.yuebaix.pangu.ready.PanGuReadyStarterConst;
import lombok.Data;
import org.springframework.boot.context.properties.ConfigurationProperties;

import javax.annotation.PostConstruct;
import java.util.List;

@ConfigurationProperties(prefix = PanGuReadyStarterConst.PAN_GU_READY_STARTER_LOGBOOK_PREFIX)
@Data
public class PanGuLogbookProperties {
private List<String> obfuscateBodyParams;

@PostConstruct
public void init() {
PanGuLogbookConfigHolder.set(this);
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
package com.yuebaix.pangu.ready.logbook;

import lombok.extern.slf4j.Slf4j;
import org.zalando.logbook.Correlation;
import org.zalando.logbook.HttpLogWriter;
import org.zalando.logbook.Precorrelation;

import java.io.IOException;

@Slf4j
public class PanGuLogbookWriter implements HttpLogWriter {
@Override
public void write(Precorrelation precorrelation, String request) throws IOException {
log.info(request);
}

@Override
public void write(Correlation correlation, String response) throws IOException {
log.info(response);
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
com.yuebaix.pangu.ready.logbook.PanGuLogbookBodyFilter
Original file line number Diff line number Diff line change
@@ -1,10 +1,11 @@
package com.yuebaix.pangu.test.controller.demo;

import com.yuebaix.pangu.common.util.JacksonUtil;
import com.yuebaix.pangu.web.base.BaseReq;
import com.yuebaix.pangu.web.base.BaseResp;
import io.swagger.annotations.ApiOperation;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.http.MediaType;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

Expand All @@ -14,8 +15,8 @@
@RequestMapping("/demo/demo")
public class DemoController {
@ApiOperation("示例")
@GetMapping("/check")
public BaseResp check(BaseReq req) {
return BaseResp.success(JacksonUtil.write(Collections.singletonMap("say", "demo")));
@PostMapping(value = "/check", consumes = MediaType.APPLICATION_JSON_VALUE)
public BaseResp check(@RequestBody BaseReq req) {
return BaseResp.success(Collections.singletonMap("say", "demo"));
}
}
Original file line number Diff line number Diff line change
@@ -1,6 +1,5 @@
package com.yuebaix.pangu.test.controller.demo;

import com.yuebaix.pangu.common.util.JacksonUtil;
import com.yuebaix.pangu.web.base.BaseReq;
import com.yuebaix.pangu.web.base.BaseResp;
import io.swagger.annotations.ApiOperation;
Expand All @@ -16,6 +15,6 @@ public class TestController {
@ApiOperation("测试")
@GetMapping("/check")
public BaseResp check(BaseReq req) {
return BaseResp.success(JacksonUtil.write(Collections.singletonMap("say", "test")));
return BaseResp.success(Collections.singletonMap("say", "test"));
}
}
15 changes: 13 additions & 2 deletions pangu-test/src/main/resources/application.properties
Original file line number Diff line number Diff line change
Expand Up @@ -4,8 +4,19 @@
#pangu.readystarter.logbook.enabled=false

#springfox.documentation.swagger-ui.enabled=true
#logbook.exclude=/demo/demo/check
#logbook.format.style=json

#pangu.readystarter.logbook.config.obfuscate-body-params=token,password,mobile,email
#logging.level.org.zalando.logbook=TRACE
#logbook.include=/**
#logbook.exclude=
#logbook.filter.enabled=true
#logbook.secure-filter.enabled=true
#logbook.format.style=http
#logbook.strategy=default
#logbook.minimum-status=400
#logbook.obfuscate.headers=Authorization,Cookie,Set-Cookie
#logbook.obfuscate.parameters=access_token,password,token,mobile,email
#logbook.write.chunk-size=1000

logging.level.com.yuebaix.pangu=debug

Expand Down

0 comments on commit c2888ec

Please sign in to comment.