Commit e86c19c3 authored by liaozan's avatar liaozan 🏀

Signature validation ignore empty values

parent 56051fe7
...@@ -158,11 +158,15 @@ public class StreamUtils { ...@@ -158,11 +158,15 @@ public class StreamUtils {
} }
public static <T> String join(Iterable<T> data, String delimiter) { public static <T> String join(Iterable<T> data, String delimiter) {
return join(data, delimiter, Objects::toString); return join(data, delimiter, Objects::toString, any -> true);
} }
public static <T> String join(Iterable<T> data, String delimiter, Function<T, String> toStringFunction) { public static <T> String join(Iterable<T> data, String delimiter, Predicate<String> predicate) {
return from(data).map(toStringFunction).collect(joining(delimiter)); return join(data, delimiter, Objects::toString, predicate);
}
public static <T> String join(Iterable<T> data, String delimiter, Function<T, String> toStringFunction, Predicate<String> predicate) {
return from(data).map(toStringFunction).filter(predicate).collect(joining(delimiter));
} }
public static List<String> split(String data) { public static List<String> split(String data) {
......
...@@ -12,11 +12,7 @@ import org.springframework.core.Ordered; ...@@ -12,11 +12,7 @@ import org.springframework.core.Ordered;
*/ */
public class DefaultExceptionTranslator implements ExceptionTranslator<ResponseDTO<String>> { public class DefaultExceptionTranslator implements ExceptionTranslator<ResponseDTO<String>> {
private final boolean isProduction; private final boolean isProduction = EnvUtils.isProduction();
public DefaultExceptionTranslator() {
this.isProduction = EnvUtils.isProduction();
}
@Override @Override
public ResponseDTO<String> translate(Throwable throwable, int code, int action, String message) { public ResponseDTO<String> translate(Throwable throwable, int code, int action, String message) {
......
package com.schbrain.common.web.support.signature; package com.schbrain.common.web.support.signature;
import cn.hutool.crypto.digest.DigestUtil; import cn.hutool.crypto.digest.DigestUtil;
import com.google.common.base.Joiner; import com.schbrain.common.util.StreamUtils;
import com.schbrain.common.web.support.BaseHandlerInterceptor; import com.schbrain.common.web.support.BaseHandlerInterceptor;
import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.StringUtils;
import org.springframework.web.method.HandlerMethod; import org.springframework.web.method.HandlerMethod;
...@@ -9,6 +9,7 @@ import org.springframework.web.util.ContentCachingRequestWrapper; ...@@ -9,6 +9,7 @@ import org.springframework.web.util.ContentCachingRequestWrapper;
import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpServletResponse;
import java.util.List;
import java.util.Objects; import java.util.Objects;
import static cn.hutool.core.text.StrPool.UNDERLINE; import static cn.hutool.core.text.StrPool.UNDERLINE;
...@@ -17,8 +18,6 @@ import static org.springframework.web.util.WebUtils.getNativeRequest; ...@@ -17,8 +18,6 @@ import static org.springframework.web.util.WebUtils.getNativeRequest;
public abstract class AbstractSignatureValidationInterceptor<T extends SignatureContext> extends BaseHandlerInterceptor { public abstract class AbstractSignatureValidationInterceptor<T extends SignatureContext> extends BaseHandlerInterceptor {
private static final Joiner JOINER = Joiner.on(UNDERLINE).skipNulls();
private static final String SCH_APP_KEY = "Sch-App-Key"; private static final String SCH_APP_KEY = "Sch-App-Key";
private static final String SCH_TIMESTAMP = "Sch-Timestamp"; private static final String SCH_TIMESTAMP = "Sch-Timestamp";
private static final String SCH_SIGNATURE = "Sch-Signature"; private static final String SCH_SIGNATURE = "Sch-Signature";
...@@ -69,7 +68,7 @@ public abstract class AbstractSignatureValidationInterceptor<T extends Signature ...@@ -69,7 +68,7 @@ public abstract class AbstractSignatureValidationInterceptor<T extends Signature
} }
protected String signParams(String requestUri, String queryString, String bodyString, String timestamp, String appKey, String appSecret) { protected String signParams(String requestUri, String queryString, String bodyString, String timestamp, String appKey, String appSecret) {
String toSign = JOINER.join(requestUri, queryString, bodyString, timestamp, appKey, appSecret); String toSign = StreamUtils.join(List.of(requestUri, queryString, bodyString, timestamp, appKey, appSecret), UNDERLINE, StringUtils::isNotBlank);
return DigestUtil.sha256Hex(toSign); return DigestUtil.sha256Hex(toSign);
} }
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment