Commit 65202db9 authored by liaozan's avatar liaozan 🏀

Refactor datetime converters to support both long and string

parent 727f42ec
......@@ -9,8 +9,7 @@ import java.util.Collections;
import java.util.List;
import java.util.function.Function;
import static com.schbrain.common.constants.PageConstants.DEFAULT_SEARCH_COUNT;
import static com.schbrain.common.constants.PageConstants.DEFAULT_TOTAL_COUNT;
import static com.schbrain.common.constants.PageConstants.*;
/**
* @author liaozan
......@@ -71,4 +70,4 @@ public class PageUtils {
return pageParam;
}
}
\ No newline at end of file
}
......@@ -14,9 +14,7 @@ import java.util.stream.Stream;
import java.util.stream.StreamSupport;
import static java.util.Collections.emptyList;
import static java.util.stream.Collectors.groupingBy;
import static java.util.stream.Collectors.joining;
import static java.util.stream.Collectors.mapping;
import static java.util.stream.Collectors.*;
/**
* @author liaozan
......
......@@ -77,4 +77,4 @@ public interface ValidateSupport {
return value != null ? value : defaultValueSupplier.get();
}
}
\ No newline at end of file
}
......@@ -47,4 +47,4 @@ public @interface TraceParam {
protected abstract String format0(Map<String, Object> argsMap);
}
}
\ No newline at end of file
}
......@@ -15,4 +15,4 @@ public @interface IgnoreLogin {
*/
boolean ignore() default true;
}
\ No newline at end of file
}
......@@ -6,10 +6,7 @@ import lombok.NoArgsConstructor;
import java.util.ArrayList;
import java.util.List;
import static com.schbrain.common.constants.PageConstants.DEFAULT_PAGE_INDEX;
import static com.schbrain.common.constants.PageConstants.DEFAULT_PAGE_SIZE;
import static com.schbrain.common.constants.PageConstants.DEFAULT_TOTAL_COUNT;
import static com.schbrain.common.constants.PageConstants.DEFAULT_TOTAL_PAGE_COUNT;
import static com.schbrain.common.constants.PageConstants.*;
/**
* @author liaozan
......
......@@ -419,4 +419,4 @@ public class TreeNodeProcessor<NODE extends TreeNode> {
node.setRgt(null);
}
}
\ No newline at end of file
}
......@@ -3,7 +3,6 @@ package com.schbrain.common.web;
import com.schbrain.common.web.properties.WebProperties;
import com.schbrain.common.web.servlet.CharacterEncodingServletContextInitializer;
import com.schbrain.common.web.servlet.RequestLoggingFilter;
import com.schbrain.common.web.servlet.RequestWrapperFilter;
import com.schbrain.common.web.servlet.TraceIdInitializeServletListener;
import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
......@@ -39,12 +38,6 @@ public class ServletComponentConfiguration {
return requestContextFilter;
}
@Bean
@ConditionalOnMissingBean
public RequestWrapperFilter requestWrapperFilter() {
return new RequestWrapperFilter();
}
@Bean
@ConditionalOnMissingBean
@ConditionalOnProperty(value = "schbrain.web.enable-request-logging", havingValue = "true", matchIfMissing = true)
......
......@@ -3,7 +3,7 @@ package com.schbrain.common.web;
import com.schbrain.common.web.argument.BodyParamArgumentResolverWebMvcConfigurer;
import com.schbrain.common.web.properties.WebProperties;
import com.schbrain.common.web.result.ResponseBodyHandler;
import com.schbrain.common.web.support.converter.Jsr310DateTimeWebMvcConfigurer;
import com.schbrain.common.web.support.converter.datetime.DateTimeConvertersWebMvcConfigurer;
import org.springframework.beans.factory.BeanFactory;
import org.springframework.beans.factory.ObjectProvider;
import org.springframework.boot.autoconfigure.AutoConfigurationPackages;
......@@ -43,8 +43,8 @@ public class WebCommonAutoConfiguration {
@Bean
@ConditionalOnMissingBean
public Jsr310DateTimeWebMvcConfigurer defaultJsr310DateTimeWebMvcConfigurer() {
return new Jsr310DateTimeWebMvcConfigurer();
public DateTimeConvertersWebMvcConfigurer defaultDateTimeConvertersWebMvcConfigurer() {
return new DateTimeConvertersWebMvcConfigurer();
}
@Bean
......
......@@ -22,4 +22,4 @@ public @interface ResponseWrapOption {
*/
boolean ignoreException() default true;
}
\ No newline at end of file
}
......@@ -64,18 +64,14 @@ public class BodyParamMethodArgumentResolver extends AbstractNamedValueMethodArg
return objectMapper.constructType(parameterType);
}
private JsonNode getRequestBody(NativeWebRequest nativeWebRequest) throws IOException {
JsonNode requestBody = (JsonNode) nativeWebRequest.getAttribute(REQUEST_BODY_CACHE, SCOPE_REQUEST);
private JsonNode getRequestBody(NativeWebRequest webRequest) throws IOException {
JsonNode requestBody = (JsonNode) webRequest.getAttribute(REQUEST_BODY_CACHE, SCOPE_REQUEST);
if (requestBody == null) {
HttpServletRequest request = wrapRequest(nativeWebRequest);
HttpServletRequest request = wrapIfRequired(webRequest.getNativeRequest(HttpServletRequest.class));
requestBody = objectMapper.readTree(request.getInputStream());
nativeWebRequest.setAttribute(REQUEST_BODY_CACHE, requestBody, SCOPE_REQUEST);
webRequest.setAttribute(REQUEST_BODY_CACHE, requestBody, SCOPE_REQUEST);
}
return requestBody;
}
private HttpServletRequest wrapRequest(NativeWebRequest request) {
return wrapIfRequired(request.getNativeRequest(HttpServletRequest.class));
}
}
......@@ -28,10 +28,8 @@ import java.sql.SQLException;
import java.util.Arrays;
import java.util.List;
import static com.schbrain.common.constants.ResponseCodeConstants.PARAM_INVALID;
import static com.schbrain.common.constants.ResponseCodeConstants.SERVER_ERROR;
import static com.schbrain.common.util.support.ValidationMessageBuilder.buildBindingErrorMsg;
import static com.schbrain.common.util.support.ValidationMessageBuilder.buildConstraintViolationErrorMsg;
import static com.schbrain.common.constants.ResponseCodeConstants.*;
import static com.schbrain.common.util.support.ValidationMessageBuilder.*;
/**
* @author liaozan
......
......@@ -14,8 +14,7 @@ import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import static com.schbrain.common.web.utils.RequestContentCachingUtils.getRequestBody;
import static com.schbrain.common.web.utils.RequestContentCachingUtils.wrapIfRequired;
import static com.schbrain.common.web.utils.RequestContentCachingUtils.*;
/**
* 请求日志拦截器
......
package com.schbrain.common.web.servlet;
import org.springframework.boot.web.servlet.filter.OrderedFilter;
import org.springframework.core.Ordered;
import org.springframework.web.filter.OncePerRequestFilter;
import javax.servlet.FilterChain;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import static com.schbrain.common.web.utils.RequestContentCachingUtils.wrapIfRequired;
/**
* @author liaozan
* @since 2023/8/20
*/
public class RequestWrapperFilter extends OncePerRequestFilter implements OrderedFilter {
@Override
public int getOrder() {
return Ordered.HIGHEST_PRECEDENCE;
}
@Override
protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain chain) throws ServletException, IOException {
chain.doFilter(wrapIfRequired(request), response);
}
}
package com.schbrain.common.web.support.converter;
import org.springframework.core.convert.converter.Converter;
import java.time.Instant;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.LocalTime;
import java.util.ArrayList;
import java.util.List;
import static java.time.LocalDateTime.ofInstant;
import static java.time.ZoneId.systemDefault;
/**
* @author liaozan
* @since 2023/8/16
*/
public class Jsr310Converters {
public static List<Converter<?, ?>> getConverters() {
List<Converter<?, ?>> converters = new ArrayList<>();
converters.add(LongToLocalDateConverter.INSTANCE);
converters.add(LongToLocalTimeConverter.INSTANCE);
converters.add(LongToLocalDateTimeConverter.INSTANCE);
converters.add(StringToLocalDateConverter.INSTANCE);
converters.add(StringToLocalTimeConverter.INSTANCE);
converters.add(StringToLocalDateTimeConverter.INSTANCE);
return converters;
}
public enum LongToLocalDateConverter implements Converter<Long, LocalDate> {
INSTANCE;
@Override
public LocalDate convert(Long source) {
return LongToLocalDateTimeConverter.INSTANCE.convert(source).toLocalDate();
}
}
public enum LongToLocalTimeConverter implements Converter<Long, LocalTime> {
INSTANCE;
@Override
public LocalTime convert(Long source) {
return LongToLocalDateTimeConverter.INSTANCE.convert(source).toLocalTime();
}
}
public enum LongToLocalDateTimeConverter implements Converter<Long, LocalDateTime> {
INSTANCE;
@Override
public LocalDateTime convert(Long source) {
return ofInstant(Instant.ofEpochMilli(source), systemDefault());
}
}
public enum StringToLocalDateConverter implements Converter<String, LocalDate> {
INSTANCE;
@Override
public LocalDate convert(String source) {
return StringToLocalDateTimeConverter.INSTANCE.convert(source).toLocalDate();
}
}
public enum StringToLocalTimeConverter implements Converter<String, LocalTime> {
INSTANCE;
@Override
public LocalTime convert(String source) {
return StringToLocalDateTimeConverter.INSTANCE.convert(source).toLocalTime();
}
}
public enum StringToLocalDateTimeConverter implements Converter<String, LocalDateTime> {
INSTANCE;
@Override
public LocalDateTime convert(String source) {
return ofInstant(Instant.ofEpochMilli(Long.parseLong(source)), systemDefault());
}
}
}
package com.schbrain.common.web.support.converter.datetime;
import cn.hutool.core.date.DatePattern;
import cn.hutool.core.util.NumberUtil;
import org.apache.commons.lang3.StringUtils;
import org.springframework.core.ResolvableType;
import org.springframework.core.convert.TypeDescriptor;
import org.springframework.core.convert.converter.ConditionalGenericConverter;
import org.springframework.format.annotation.DateTimeFormat;
import java.time.format.DateTimeFormatter;
import java.util.Map;
import java.util.Set;
import java.util.concurrent.ConcurrentHashMap;
/**
* @author liaozan
* @since 2023/9/16
*/
abstract class DateTimeConditionalConverter<T> implements ConditionalGenericConverter {
private final TypeDescriptor targetType;
private final TypeDescriptor stringType = TypeDescriptor.valueOf(String.class);
private final Map<String, DateTimeFormatter> formatters = new ConcurrentHashMap<>();
public DateTimeConditionalConverter() {
this.targetType = TypeDescriptor.valueOf(ResolvableType.forClass(getClass()).getSuperType().getGeneric(0).getRawClass());
}
@Override
public boolean matches(TypeDescriptor sourceType, TypeDescriptor targetType) {
return sourceType.isAssignableTo(stringType) && targetType.isAssignableTo(this.targetType);
}
@Override
public Set<ConvertiblePair> getConvertibleTypes() {
return Set.of(new ConvertiblePair(String.class, targetType.getObjectType()));
}
@Override
public T convert(Object source, TypeDescriptor sourceType, TypeDescriptor targetType) {
if (source == null) {
return null;
}
return convert((String) source, targetType);
}
protected final T convert(String source, TypeDescriptor targetType) {
if (StringUtils.isBlank(source)) {
return null;
}
if (NumberUtil.isLong(source)) {
return doConvert(Long.parseLong(source));
} else {
DateTimeFormatter formatter = ofPattern(determinePattern(targetType));
return doConvert(source, formatter);
}
}
protected String determinePattern(TypeDescriptor targetType) {
DateTimeFormat annotation = targetType.getAnnotation(DateTimeFormat.class);
String pattern = null;
if (annotation != null) {
pattern = annotation.pattern();
}
if (StringUtils.isBlank(pattern)) {
pattern = defaultPattern();
}
return pattern;
}
protected String defaultPattern() {
return DatePattern.NORM_DATETIME_PATTERN;
}
protected DateTimeFormatter ofPattern(String pattern) {
return formatters.computeIfAbsent(pattern, ignore -> DatePattern.createFormatter(pattern));
}
protected abstract T doConvert(Long source);
protected abstract T doConvert(String source, DateTimeFormatter formatter);
}
package com.schbrain.common.web.support.converter;
package com.schbrain.common.web.support.converter.datetime;
import org.springframework.format.FormatterRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
......@@ -7,11 +7,14 @@ import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
* @author liaozan
* @since 2023/8/16
*/
public class Jsr310DateTimeWebMvcConfigurer implements WebMvcConfigurer {
public class DateTimeConvertersWebMvcConfigurer implements WebMvcConfigurer {
@Override
public void addFormatters(FormatterRegistry registry) {
Jsr310Converters.getConverters().forEach(registry::addConverter);
registry.addConverter(StringToDateConverter.INSTANCE);
registry.addConverter(StringToLocalTimeConverter.INSTANCE);
registry.addConverter(StringToLocalDateConverter.INSTANCE);
registry.addConverter(StringToLocalDateTimeConverter.INSTANCE);
}
}
package com.schbrain.common.web.support.converter.datetime;
import cn.hutool.core.date.DateUtil;
import java.time.format.DateTimeFormatter;
import java.util.Date;
/**
* @author liaozan
* @since 2023/9/16
*/
class StringToDateConverter extends DateTimeConditionalConverter<Date> {
static final StringToDateConverter INSTANCE = new StringToDateConverter();
@Override
protected Date doConvert(Long source) {
return DateUtil.date(source);
}
@Override
protected Date doConvert(String source, DateTimeFormatter formatter) {
return DateUtil.parse(source, formatter);
}
}
package com.schbrain.common.web.support.converter.datetime;
import cn.hutool.core.date.DatePattern;
import cn.hutool.core.date.LocalDateTimeUtil;
import java.time.LocalDate;
import java.time.format.DateTimeFormatter;
/**
* @author liaozan
* @since 2023/9/16
*/
class StringToLocalDateConverter extends DateTimeConditionalConverter<LocalDate> {
static final StringToLocalDateConverter INSTANCE = new StringToLocalDateConverter();
@Override
protected String defaultPattern() {
return DatePattern.NORM_DATE_PATTERN;
}
@Override
protected LocalDate doConvert(Long source) {
return LocalDateTimeUtil.of(source).toLocalDate();
}
@Override
protected LocalDate doConvert(String source, DateTimeFormatter formatter) {
return LocalDate.parse(source, formatter);
}
}
package com.schbrain.common.web.support.converter.datetime;
import cn.hutool.core.date.LocalDateTimeUtil;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
/**
* @author liaozan
* @since 2023/9/16
*/
class StringToLocalDateTimeConverter extends DateTimeConditionalConverter<LocalDateTime> {
static final StringToLocalDateTimeConverter INSTANCE = new StringToLocalDateTimeConverter();
@Override
protected LocalDateTime doConvert(Long source) {
return LocalDateTimeUtil.of(source);
}
@Override
protected LocalDateTime doConvert(String source, DateTimeFormatter formatter) {
return LocalDateTime.parse(source, formatter);
}
}
package com.schbrain.common.web.support.converter.datetime;
import cn.hutool.core.date.DatePattern;
import cn.hutool.core.date.LocalDateTimeUtil;
import java.time.LocalTime;
import java.time.format.DateTimeFormatter;
/**
* @author liaozan
* @since 2023/9/16
*/
class StringToLocalTimeConverter extends DateTimeConditionalConverter<LocalTime> {
static final StringToLocalTimeConverter INSTANCE = new StringToLocalTimeConverter();
@Override
protected String defaultPattern() {
return DatePattern.NORM_TIME_PATTERN;
}
@Override
protected LocalTime doConvert(Long source) {
return LocalDateTimeUtil.of(source).toLocalTime();
}
@Override
protected LocalTime doConvert(String source, DateTimeFormatter formatter) {
return LocalTime.parse(source, formatter);
}
}
package com.schbrain.common.web.support.signature;
import cn.hutool.crypto.digest.DigestUtil;
import com.schbrain.common.util.StreamUtils;
import com.schbrain.common.util.TraceIdUtils;
import com.schbrain.common.web.support.BaseHandlerInterceptor;
import org.apache.commons.lang3.StringUtils;
import org.springframework.web.method.HandlerMethod;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.util.Arrays;
import java.util.List;
import java.util.Objects;
import static cn.hutool.core.text.StrPool.UNDERLINE;
import static com.schbrain.common.web.utils.RequestContentCachingUtils.getRequestBody;
public abstract class AbstractSignatureValidationInterceptor<T extends SignatureContext> extends BaseHandlerInterceptor {
private static final String SCH_APP_KEY = "Sch-App-Key";
private static final String SCH_TIMESTAMP = "Sch-Timestamp";
private static final String SCH_SIGNATURE = "Sch-Signature";
private static final String SCH_EXPIRE_TIME = "Sch-Expire-Time";
@Override
protected boolean preHandle(HttpServletRequest request, HttpServletResponse response, HandlerMethod handler) {
String appKey = request.getHeader(SCH_APP_KEY);
String timestamp = request.getHeader(SCH_TIMESTAMP);
String signature = request.getHeader(SCH_SIGNATURE);
String expireTime = request.getHeader(SCH_EXPIRE_TIME);
String traceId = request.getHeader(TraceIdUtils.TRACE_ID);
if (StringUtils.isNotBlank(traceId)) {
TraceIdUtils.set(traceId);
}
// 空校验
if (StringUtils.isAnyBlank(appKey, timestamp, signature, expireTime)) {
throw new SignatureValidationException("签名参数为空!");
}
// 过期校验
if (System.currentTimeMillis() > Long.parseLong(expireTime)) {
throw new SignatureValidationException("请求信息已过期!");
}
// 获取appSecret
SignatureContext context = getSignatureContext(appKey);
if (null == context || StringUtils.isBlank(context.getAppSecret())) {
throw new SignatureValidationException("appSecret不存在!");
}
String requestUri = request.getRequestURI();
String queryString = request.getQueryString();
String requestBody = getRequestBody(request);
// 校验签名
String calculatedSignature = signParams(requestUri, queryString, requestBody, timestamp, appKey, context.getAppSecret());
if (!Objects.equals(signature, calculatedSignature)) {
throw new SignatureValidationException();
}
SignatureContextUtil.set(context);
return true;
}
@Override
protected void afterCompletion(HttpServletRequest request, HttpServletResponse response, HandlerMethod handlerMethod, Exception ex) {
SignatureContextUtil.clear();
}
protected String signParams(String requestUri, String queryString, String bodyString, String timestamp, String appKey, String appSecret) {
List<String> params = StreamUtils.filterToList(Arrays.asList(requestUri, queryString, bodyString, timestamp, appKey, appSecret), StringUtils::isNotBlank);
String toSign = StreamUtils.join(params, UNDERLINE);
return DigestUtil.sha256Hex(toSign);
}
protected abstract T getSignatureContext(String appKey);
}
package com.schbrain.common.web.support.signature;
import lombok.Data;
@Data
public class SignatureContext {
private String appKey;
private String appSecret;
}
package com.schbrain.common.web.support.signature;
import java.util.Optional;
import java.util.function.Supplier;
public class SignatureContextUtil {
private static final ThreadLocal<SignatureContext> LOCAL = new InheritableThreadLocal<>();
private static final Supplier<SignatureValidationException> EXCEPTION_SUPPLIER = SignatureValidationException::new;
/**
* 取值
*/
public static <T extends SignatureContext> T get(Class<T> type) {
return type.cast(Optional.ofNullable(LOCAL.get()).orElseThrow(EXCEPTION_SUPPLIER));
}
/**
* 获取appKey
*/
public static String getAppKey() {
return get(SignatureContext.class).getAppKey();
}
/**
* 获取appSecret
*/
public static String getAppSecret() {
return get(SignatureContext.class).getAppSecret();
}
/**
* 赋值
*/
public static <T extends SignatureContext> void set(T signatureContext) {
LOCAL.set(signatureContext);
}
/**
* 移除
*/
public static void clear() {
LOCAL.remove();
}
}
package com.schbrain.common.web.support.signature;
import com.schbrain.common.exception.BaseException;
import static com.schbrain.common.constants.ResponseActionConstants.ALERT;
import static com.schbrain.common.constants.ResponseCodeConstants.PARAM_INVALID;
public class SignatureValidationException extends BaseException {
private static final long serialVersionUID = 7564001466173362458L;
private static final String DEFAULT_ERR_MSG = "签名验证异常";
public SignatureValidationException() {
this(DEFAULT_ERR_MSG);
}
public SignatureValidationException(String message) {
super(message, PARAM_INVALID, ALERT);
}
}
package com.schbrain.common.web.utils;
import com.schbrain.common.util.ValidateUtils;
import com.schbrain.common.web.servlet.ContentCachingRequest;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.springframework.web.util.ContentCachingRequestWrapper;
import javax.annotation.Nullable;
import javax.servlet.http.HttpServletRequest;
import java.nio.charset.Charset;
import static org.springframework.http.HttpMethod.POST;
import static org.springframework.http.MediaType.APPLICATION_JSON_VALUE;
import static org.springframework.web.util.WebUtils.getNativeRequest;
/**
......@@ -24,10 +22,10 @@ public class RequestContentCachingUtils {
*/
public static HttpServletRequest wrapIfRequired(HttpServletRequest request) {
ValidateUtils.notNull(request, "request must not be null");
if (request instanceof ContentCachingRequest || !isJsonPostRequest(request)) {
if (request instanceof ContentCachingRequestWrapper) {
return request;
} else {
return new ContentCachingRequest(request);
return new ContentCachingRequestWrapper(request);
}
}
......@@ -36,23 +34,20 @@ public class RequestContentCachingUtils {
*/
@Nullable
public static String getRequestBody(HttpServletRequest request) {
return getRequestBody(request, request.getCharacterEncoding());
return getRequestBody(request, Charset.forName(request.getCharacterEncoding()));
}
/**
* Get request body content
*/
@Nullable
public static String getRequestBody(HttpServletRequest request, String characterEncoding) {
ContentCachingRequest requestToUse = getNativeRequest(request, ContentCachingRequest.class);
public static String getRequestBody(HttpServletRequest request, Charset characterEncoding) {
ContentCachingRequestWrapper requestToUse = getNativeRequest(request, ContentCachingRequestWrapper.class);
if (requestToUse == null) {
return null;
}
return requestToUse.getContentAsString(characterEncoding);
}
private static boolean isJsonPostRequest(HttpServletRequest request) {
return POST.matches(request.getMethod()) && StringUtils.contains(request.getContentType(), APPLICATION_JSON_VALUE);
byte[] content = requestToUse.getContentAsByteArray();
return new String(content, characterEncoding);
}
}
......@@ -100,8 +100,8 @@
<aliyun-sdk-oss.version>3.17.1</aliyun-sdk-oss.version>
<!-- alibabacloud new sdk -->
<aliyun-java-core.version>0.2.0-beta</aliyun-java-core.version>
<aliyun-gateway-pop.version>0.2.0-beta</aliyun-gateway-pop.version>
<aliyun-java-core.version>0.2.1-beta</aliyun-java-core.version>
<aliyun-gateway-pop.version>0.2.1-beta</aliyun-gateway-pop.version>
<alibabacloud-sts20150401.version>1.0.3</alibabacloud-sts20150401.version>
<alibabacloud-oss20190517.version>1.0.2</alibabacloud-oss20190517.version>
<alibabacloud-vod20170321.version>1.0.6</alibabacloud-vod20170321.version>
......@@ -110,7 +110,7 @@
<!-- dingtalk -->
<alibaba-dingtalk-service-sdk.version>2.0.0</alibaba-dingtalk-service-sdk.version>
<cube-sdk-java.version>1.0.2-RELEASE</cube-sdk-java.version>
<dingtalk.version>2.0.35</dingtalk.version>
<dingtalk.version>2.0.36</dingtalk.version>
<!-- maven settings -->
<maven.compiler.showDeprecation>true</maven.compiler.showDeprecation>
......
......@@ -17,8 +17,7 @@ import java.util.Map;
import static com.ctrip.framework.apollo.core.ApolloClientSystemConsts.*;
import static com.ctrip.framework.apollo.core.ConfigConsts.APOLLO_META_KEY;
import static com.ctrip.framework.apollo.spring.config.PropertySourcesConstants.APOLLO_BOOTSTRAP_EAGER_LOAD_ENABLED;
import static com.ctrip.framework.apollo.spring.config.PropertySourcesConstants.APOLLO_BOOTSTRAP_ENABLED;
import static com.ctrip.framework.apollo.spring.config.PropertySourcesConstants.*;
/**
* @author liaozan
......
......@@ -18,9 +18,7 @@ import java.lang.reflect.Field;
import java.lang.reflect.Modifier;
import java.util.Map;
import static org.springframework.beans.factory.config.PlaceholderConfigurerSupport.DEFAULT_PLACEHOLDER_PREFIX;
import static org.springframework.beans.factory.config.PlaceholderConfigurerSupport.DEFAULT_PLACEHOLDER_SUFFIX;
import static org.springframework.beans.factory.config.PlaceholderConfigurerSupport.DEFAULT_VALUE_SEPARATOR;
import static org.springframework.beans.factory.config.PlaceholderConfigurerSupport.*;
/**
* @author liaozan
......@@ -70,4 +68,4 @@ public class ConfigurationPropertiesRegistry implements SmartInitializingSinglet
return !Modifier.isFinal(field.getModifiers());
}
}
\ No newline at end of file
}
......@@ -11,8 +11,7 @@ import java.util.List;
import java.util.Set;
import java.util.stream.Collectors;
import static com.ctrip.framework.apollo.spring.config.PropertySourcesConstants.APOLLO_BOOTSTRAP_PROPERTY_SOURCE_NAME;
import static com.ctrip.framework.apollo.spring.config.PropertySourcesConstants.APOLLO_PROPERTY_SOURCE_NAME;
import static com.ctrip.framework.apollo.spring.config.PropertySourcesConstants.*;
/**
* @author liaozan
......@@ -51,4 +50,4 @@ public class PropertySourceOrderUtils {
DefaultPropertiesPropertySource.moveToEnd(environment);
}
}
\ No newline at end of file
}
......@@ -19,4 +19,4 @@ public class TraceConsumerRpcFilter implements Filter {
return invoker.invoke(invocation);
}
}
\ No newline at end of file
}
......@@ -19,4 +19,4 @@ public class TraceProviderRpcFilter implements Filter {
return invoker.invoke(invocation);
}
}
\ No newline at end of file
}
......@@ -11,8 +11,7 @@ import org.springframework.boot.logging.LoggingSystem;
import java.util.Set;
import static com.ctrip.framework.apollo.enums.PropertyChangeType.ADDED;
import static com.ctrip.framework.apollo.enums.PropertyChangeType.MODIFIED;
import static com.ctrip.framework.apollo.enums.PropertyChangeType.*;
import static org.springframework.boot.logging.LoggingSystem.ROOT_LOGGER_NAME;
/**
......
......@@ -25,8 +25,7 @@ import java.util.List;
import java.util.Map;
import java.util.function.Supplier;
import static java.util.Collections.emptyList;
import static java.util.Collections.emptyMap;
import static java.util.Collections.*;
/**
* @author liaozan
......
......@@ -7,9 +7,7 @@ import lombok.Getter;
import java.lang.invoke.MethodHandle;
import java.lang.reflect.Field;
import static java.lang.invoke.MethodHandles.Lookup;
import static java.lang.invoke.MethodHandles.lookup;
import static java.lang.invoke.MethodHandles.privateLookupIn;
import static java.lang.invoke.MethodHandles.*;
/**
* @author liaozan
......
......@@ -11,4 +11,4 @@ import java.lang.annotation.*;
@Retention(RetentionPolicy.RUNTIME)
public @interface IgnoreConstraintCheck {
}
\ No newline at end of file
}
......@@ -14,9 +14,7 @@ import lombok.extern.slf4j.Slf4j;
import java.util.List;
import java.util.Set;
import static com.schbrain.framework.autoconfigure.mybatis.constant.MybatisConstants.CREATE_TIME;
import static com.schbrain.framework.autoconfigure.mybatis.constant.MybatisConstants.DELETE_VERSION;
import static com.schbrain.framework.autoconfigure.mybatis.constant.MybatisConstants.MODIFY_TIME;
import static com.schbrain.framework.autoconfigure.mybatis.constant.MybatisConstants.*;
/**
* @author liaozan
......
......@@ -21,6 +21,7 @@ import com.schbrain.framework.autoconfigure.oss.bean.*;
import com.schbrain.framework.autoconfigure.oss.exception.OssException;
import com.schbrain.framework.autoconfigure.oss.properties.OssProperties;
import com.schbrain.framework.autoconfigure.oss.properties.OssProperties.StsProperties;
import lombok.Getter;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
......@@ -47,6 +48,7 @@ public class OssUtils {
private static DefaultAcsClient stsAcsClient;
@Getter
private static OssProperties ossProperties;
private static StsProperties stsProperties;
......@@ -72,10 +74,6 @@ public class OssUtils {
}
}
public static OssProperties getOssProperties() {
return ossProperties;
}
public static OSSClient getOssClient() {
if (ossClient == null) {
throw new OssException("Oss client is null");
......
......@@ -16,4 +16,4 @@ public @interface MapperConfig {
String tableName();
}
\ No newline at end of file
}
......@@ -58,8 +58,8 @@ public class DefaultPropertiesEnvironmentPostProcessor extends LoggerAwareEnviro
// mvc
defaultProperties.put("spring.mvc.throw-exception-if-no-handler-found", true);
// datetime
defaultProperties.put("spring.mvc.format.date", DatePattern.NORM_DATE_PATTERN);
defaultProperties.put("spring.mvc.format.time", DatePattern.NORM_TIME_PATTERN);
defaultProperties.put("spring.mvc.format.date", DatePattern.NORM_DATETIME_PATTERN);
defaultProperties.put("spring.mvc.format.time", DatePattern.NORM_DATETIME_PATTERN);
defaultProperties.put("spring.mvc.format.date-time", DatePattern.NORM_DATETIME_PATTERN);
defaultProperties.put("spring.jackson.date-format", DatePattern.NORM_DATETIME_PATTERN);
defaultProperties.put("spring.jackson.time-zone", TimeZone.getDefault().getID());
......
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