密钥管理接口
This commit is contained in:
parent
be088194cc
commit
f7e63fadb9
@ -32,6 +32,10 @@
|
|||||||
<groupId>com.baomidou</groupId>
|
<groupId>com.baomidou</groupId>
|
||||||
<artifactId>mybatis-plus-boot-starter</artifactId>
|
<artifactId>mybatis-plus-boot-starter</artifactId>
|
||||||
</dependency>
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>javax.persistence</groupId>
|
||||||
|
<artifactId>javax.persistence-api</artifactId>
|
||||||
|
</dependency>
|
||||||
|
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>org.bouncycastle</groupId>
|
<groupId>org.bouncycastle</groupId>
|
||||||
|
@ -3,7 +3,9 @@ package com.sunyard.chsm.model.entity;
|
|||||||
import com.baomidou.mybatisplus.annotation.TableName;
|
import com.baomidou.mybatisplus.annotation.TableName;
|
||||||
import lombok.Data;
|
import lombok.Data;
|
||||||
|
|
||||||
|
import javax.persistence.Transient;
|
||||||
import java.time.LocalDateTime;
|
import java.time.LocalDateTime;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @author liulu
|
* @author liulu
|
||||||
@ -31,4 +33,8 @@ public class KeyInfo {
|
|||||||
private LocalDateTime createTime;
|
private LocalDateTime createTime;
|
||||||
private LocalDateTime updateTime;
|
private LocalDateTime updateTime;
|
||||||
|
|
||||||
|
@Transient
|
||||||
|
private List<KeyRecord> records;
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -0,0 +1,21 @@
|
|||||||
|
package com.sunyard.chsm.utils;
|
||||||
|
|
||||||
|
import java.time.format.DateTimeFormatter;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @author liulu
|
||||||
|
* @version V1.0
|
||||||
|
* @since 2022/12/6
|
||||||
|
*/
|
||||||
|
public abstract class DateFormat {
|
||||||
|
|
||||||
|
public static final String YYYY_MM_DD = "yyyy-MM-dd";
|
||||||
|
public static final String YYYY_MM_DD_HH_MM_SS = "yyyy-MM-dd HH:mm:ss";
|
||||||
|
public static final String HH_MM_SS = "HH:mm:ss";
|
||||||
|
|
||||||
|
|
||||||
|
public static final DateTimeFormatter TIME = DateTimeFormatter.ofPattern(HH_MM_SS);
|
||||||
|
public static final DateTimeFormatter DATE = DateTimeFormatter.ofPattern(YYYY_MM_DD);
|
||||||
|
public static final DateTimeFormatter DATE_TIME = DateTimeFormatter.ofPattern(YYYY_MM_DD_HH_MM_SS);
|
||||||
|
|
||||||
|
}
|
@ -1,16 +0,0 @@
|
|||||||
package com.sunyard.chsm.utils;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @author liulu
|
|
||||||
* @version V1.0
|
|
||||||
* @since 2022/12/6
|
|
||||||
*/
|
|
||||||
public abstract class DateFormatPattern {
|
|
||||||
|
|
||||||
public static final String YYYY_MM_DD = "yyyy-MM-dd";
|
|
||||||
public static final String YYYY_MM_DD_HH_MM_SS = "yyyy-MM-dd HH:mm:ss";
|
|
||||||
public static final String HH_MM_SS = "HH:mm:ss";
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
}
|
|
@ -16,7 +16,6 @@ import java.io.IOException;
|
|||||||
import java.time.LocalDate;
|
import java.time.LocalDate;
|
||||||
import java.time.LocalDateTime;
|
import java.time.LocalDateTime;
|
||||||
import java.time.LocalTime;
|
import java.time.LocalTime;
|
||||||
import java.time.format.DateTimeFormatter;
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -33,13 +32,13 @@ public abstract class JsonUtils {
|
|||||||
|
|
||||||
static {
|
static {
|
||||||
JavaTimeModule javaTimeModule = new JavaTimeModule();
|
JavaTimeModule javaTimeModule = new JavaTimeModule();
|
||||||
javaTimeModule.addSerializer(LocalTime.class, new LocalTimeSerializer(DateTimeFormatter.ofPattern(DateFormatPattern.HH_MM_SS)));
|
javaTimeModule.addSerializer(LocalTime.class, new LocalTimeSerializer(DateFormat.TIME));
|
||||||
javaTimeModule.addSerializer(LocalDate.class, new LocalDateSerializer(DateTimeFormatter.ofPattern(DateFormatPattern.YYYY_MM_DD)));
|
javaTimeModule.addSerializer(LocalDate.class, new LocalDateSerializer(DateFormat.DATE));
|
||||||
javaTimeModule.addSerializer(LocalDateTime.class, new LocalDateTimeSerializer(DateTimeFormatter.ofPattern(DateFormatPattern.YYYY_MM_DD_HH_MM_SS)));
|
javaTimeModule.addSerializer(LocalDateTime.class, new LocalDateTimeSerializer(DateFormat.DATE_TIME));
|
||||||
|
|
||||||
javaTimeModule.addDeserializer(LocalTime.class, new LocalTimeDeserializer(DateTimeFormatter.ofPattern(DateFormatPattern.HH_MM_SS)));
|
javaTimeModule.addDeserializer(LocalTime.class, new LocalTimeDeserializer(DateFormat.TIME));
|
||||||
javaTimeModule.addDeserializer(LocalDate.class, new LocalDateDeserializer(DateTimeFormatter.ofPattern(DateFormatPattern.YYYY_MM_DD)));
|
javaTimeModule.addDeserializer(LocalDate.class, new LocalDateDeserializer(DateFormat.DATE));
|
||||||
javaTimeModule.addDeserializer(LocalDateTime.class, new LocalDateTimeDeserializer(DateTimeFormatter.ofPattern(DateFormatPattern.YYYY_MM_DD_HH_MM_SS)));
|
javaTimeModule.addDeserializer(LocalDateTime.class, new LocalDateTimeDeserializer(DateFormat.DATE_TIME));
|
||||||
|
|
||||||
OBJECT_MAPPER.setSerializationInclusion(JsonInclude.Include.NON_EMPTY);
|
OBJECT_MAPPER.setSerializationInclusion(JsonInclude.Include.NON_EMPTY);
|
||||||
OBJECT_MAPPER.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
|
OBJECT_MAPPER.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
|
||||||
|
@ -111,10 +111,7 @@
|
|||||||
<groupId>io.jsonwebtoken</groupId>
|
<groupId>io.jsonwebtoken</groupId>
|
||||||
<artifactId>jjwt</artifactId>
|
<artifactId>jjwt</artifactId>
|
||||||
</dependency>
|
</dependency>
|
||||||
<dependency>
|
|
||||||
<groupId>javax.persistence</groupId>
|
|
||||||
<artifactId>javax.persistence-api</artifactId>
|
|
||||||
</dependency>
|
|
||||||
|
|
||||||
|
|
||||||
</dependencies>
|
</dependencies>
|
||||||
|
@ -5,11 +5,19 @@ import com.sunyard.chsm.dto.KeyInfoDTO;
|
|||||||
import com.sunyard.chsm.enums.KeyCategory;
|
import com.sunyard.chsm.enums.KeyCategory;
|
||||||
import com.sunyard.chsm.model.R;
|
import com.sunyard.chsm.model.R;
|
||||||
import com.sunyard.chsm.service.KeyInfoService;
|
import com.sunyard.chsm.service.KeyInfoService;
|
||||||
|
import com.sunyard.chsm.utils.DateFormat;
|
||||||
|
import org.springframework.core.io.ByteArrayResource;
|
||||||
|
import org.springframework.http.HttpHeaders;
|
||||||
|
import org.springframework.http.MediaType;
|
||||||
|
import org.springframework.http.ResponseEntity;
|
||||||
import org.springframework.web.bind.annotation.GetMapping;
|
import org.springframework.web.bind.annotation.GetMapping;
|
||||||
|
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.RequestMapping;
|
||||||
import org.springframework.web.bind.annotation.RestController;
|
import org.springframework.web.bind.annotation.RestController;
|
||||||
|
|
||||||
import javax.annotation.Resource;
|
import javax.annotation.Resource;
|
||||||
|
import javax.validation.Valid;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 非对称密钥管理接口
|
* 非对称密钥管理接口
|
||||||
@ -37,5 +45,31 @@ public class KeyInfoAsymController {
|
|||||||
return R.data(page);
|
return R.data(page);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 密钥备份(文件下载)
|
||||||
|
*
|
||||||
|
* @param backup 参数
|
||||||
|
*/
|
||||||
|
@PostMapping("/backup")
|
||||||
|
public ResponseEntity<org.springframework.core.io.Resource> backupKey(@Valid @RequestBody KeyInfoDTO.Backup backup) {
|
||||||
|
backup.setKeyType(KeyCategory.SYM_KEY.getCode());
|
||||||
|
byte[] content = keyInfoService.backupKey(backup);
|
||||||
|
|
||||||
|
String fileName = String.join("-",
|
||||||
|
"AsymKey-Backup",
|
||||||
|
backup.getStartTime().format(DateFormat.DATE),
|
||||||
|
backup.getEndTime().format(DateFormat.DATE)
|
||||||
|
);
|
||||||
|
// 设置下载响应的 headers
|
||||||
|
HttpHeaders headers = new HttpHeaders();
|
||||||
|
headers.add(HttpHeaders.CONTENT_DISPOSITION, "attachment; filename=\"" + fileName + "\"");
|
||||||
|
|
||||||
|
// 返回带文件内容的响应
|
||||||
|
return ResponseEntity.ok()
|
||||||
|
.headers(headers)
|
||||||
|
.contentType(MediaType.APPLICATION_OCTET_STREAM)
|
||||||
|
.body(new ByteArrayResource(content));
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -5,13 +5,19 @@ import com.sunyard.chsm.dto.KeyInfoDTO;
|
|||||||
import com.sunyard.chsm.enums.KeyCategory;
|
import com.sunyard.chsm.enums.KeyCategory;
|
||||||
import com.sunyard.chsm.model.R;
|
import com.sunyard.chsm.model.R;
|
||||||
import com.sunyard.chsm.service.KeyInfoService;
|
import com.sunyard.chsm.service.KeyInfoService;
|
||||||
|
import com.sunyard.chsm.utils.DateFormat;
|
||||||
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
|
import org.springframework.core.io.ByteArrayResource;
|
||||||
|
import org.springframework.core.io.Resource;
|
||||||
|
import org.springframework.http.HttpHeaders;
|
||||||
|
import org.springframework.http.MediaType;
|
||||||
|
import org.springframework.http.ResponseEntity;
|
||||||
import org.springframework.web.bind.annotation.GetMapping;
|
import org.springframework.web.bind.annotation.GetMapping;
|
||||||
import org.springframework.web.bind.annotation.PostMapping;
|
import org.springframework.web.bind.annotation.PostMapping;
|
||||||
import org.springframework.web.bind.annotation.RequestBody;
|
import org.springframework.web.bind.annotation.RequestBody;
|
||||||
import org.springframework.web.bind.annotation.RequestMapping;
|
import org.springframework.web.bind.annotation.RequestMapping;
|
||||||
import org.springframework.web.bind.annotation.RestController;
|
import org.springframework.web.bind.annotation.RestController;
|
||||||
|
|
||||||
import javax.annotation.Resource;
|
|
||||||
import javax.validation.Valid;
|
import javax.validation.Valid;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -24,7 +30,7 @@ import javax.validation.Valid;
|
|||||||
@RequestMapping("/key/info/sym")
|
@RequestMapping("/key/info/sym")
|
||||||
public class KeyInfoSymController {
|
public class KeyInfoSymController {
|
||||||
|
|
||||||
@Resource
|
@Autowired
|
||||||
private KeyInfoService keyInfoService;
|
private KeyInfoService keyInfoService;
|
||||||
|
|
||||||
|
|
||||||
@ -43,13 +49,29 @@ public class KeyInfoSymController {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 密钥备份
|
* 密钥备份(文件下载)
|
||||||
*
|
*
|
||||||
* @param backup 参数
|
* @param backup 参数
|
||||||
*/
|
*/
|
||||||
@PostMapping("/backup")
|
@PostMapping("/backup")
|
||||||
public void backupKey(@Valid @RequestBody KeyInfoDTO.Backup backup) {
|
public ResponseEntity<Resource> backupKey(@Valid @RequestBody KeyInfoDTO.Backup backup) {
|
||||||
|
backup.setKeyType(KeyCategory.SYM_KEY.getCode());
|
||||||
|
byte[] content = keyInfoService.backupKey(backup);
|
||||||
|
|
||||||
|
String fileName = String.join("-",
|
||||||
|
"SymKey-Backup",
|
||||||
|
backup.getStartTime().format(DateFormat.DATE),
|
||||||
|
backup.getEndTime().format(DateFormat.DATE)
|
||||||
|
);
|
||||||
|
// 设置下载响应的 headers
|
||||||
|
HttpHeaders headers = new HttpHeaders();
|
||||||
|
headers.add(HttpHeaders.CONTENT_DISPOSITION, "attachment; filename=\"" + fileName + "\"");
|
||||||
|
|
||||||
|
// 返回带文件内容的响应
|
||||||
|
return ResponseEntity.ok()
|
||||||
|
.headers(headers)
|
||||||
|
.contentType(MediaType.APPLICATION_OCTET_STREAM)
|
||||||
|
.body(new ByteArrayResource(content));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -101,6 +101,10 @@ public abstract class KeyInfoDTO {
|
|||||||
|
|
||||||
@Data
|
@Data
|
||||||
public static class Backup {
|
public static class Backup {
|
||||||
|
/**
|
||||||
|
* @ignore
|
||||||
|
*/
|
||||||
|
private String keyType;
|
||||||
/**
|
/**
|
||||||
* 开始日期 yyyy-MM-dd
|
* 开始日期 yyyy-MM-dd
|
||||||
*/
|
*/
|
||||||
|
@ -17,6 +17,8 @@ public interface KeyInfoService {
|
|||||||
|
|
||||||
void update(KeyInfoDTO.Update update);
|
void update(KeyInfoDTO.Update update);
|
||||||
|
|
||||||
|
byte[] backupKey(KeyInfoDTO.Backup backup);
|
||||||
|
|
||||||
void enableKey(List<Long> ids);
|
void enableKey(List<Long> ids);
|
||||||
|
|
||||||
void disableKey(List<Long> ids);
|
void disableKey(List<Long> ids);
|
||||||
|
@ -52,7 +52,8 @@ public class CryptoServiceServiceImpl implements CryptoServiceService {
|
|||||||
public Page<CryptoServiceDTO.View> selectPageList(CryptoServiceDTO.Query query) {
|
public Page<CryptoServiceDTO.View> selectPageList(CryptoServiceDTO.Query query) {
|
||||||
|
|
||||||
LambdaQueryWrapper<CryptoService> wrapper = new LambdaQueryWrapper<CryptoService>()
|
LambdaQueryWrapper<CryptoService> wrapper = new LambdaQueryWrapper<CryptoService>()
|
||||||
.like(StringUtils.hasText(query.getName()), CryptoService::getName, query.getName());
|
.like(StringUtils.hasText(query.getName()), CryptoService::getName, query.getName())
|
||||||
|
.orderByDesc(CryptoService::getCreateTime);
|
||||||
|
|
||||||
IPage<CryptoService> servicePage = cryptoServiceMapper.selectPage(
|
IPage<CryptoService> servicePage = cryptoServiceMapper.selectPage(
|
||||||
new Page<>(query.getPageNumber(), query.getPageSize()),
|
new Page<>(query.getPageNumber(), query.getPageSize()),
|
||||||
|
@ -44,7 +44,8 @@ public class DeviceGroupServiceImpl implements DeviceGroupService {
|
|||||||
public Page<DeviceGroupDTO.View> selectPageList(DeviceGroupDTO.Query query) {
|
public Page<DeviceGroupDTO.View> selectPageList(DeviceGroupDTO.Query query) {
|
||||||
|
|
||||||
LambdaQueryWrapper<DeviceGroup> wrapper = new LambdaQueryWrapper<DeviceGroup>()
|
LambdaQueryWrapper<DeviceGroup> wrapper = new LambdaQueryWrapper<DeviceGroup>()
|
||||||
.like(StringUtils.hasText(query.getName()), DeviceGroup::getName, query.getName());
|
.like(StringUtils.hasText(query.getName()), DeviceGroup::getName, query.getName())
|
||||||
|
.orderByDesc(DeviceGroup::getCreateTime);
|
||||||
|
|
||||||
IPage<DeviceGroup> page = spDeviceGroupMapper.selectPage(
|
IPage<DeviceGroup> page = spDeviceGroupMapper.selectPage(
|
||||||
new Page<>(query.getPageNumber(), query.getPageSize()),
|
new Page<>(query.getPageNumber(), query.getPageSize()),
|
||||||
|
@ -41,7 +41,8 @@ public class DeviceServiceImpl implements DeviceService {
|
|||||||
LambdaQueryWrapper<Device> wrapper = new LambdaQueryWrapper<Device>()
|
LambdaQueryWrapper<Device> wrapper = new LambdaQueryWrapper<Device>()
|
||||||
.eq(StringUtils.hasText(query.getManufacturers()), Device::getManufacturer, query.getManufacturers())
|
.eq(StringUtils.hasText(query.getManufacturers()), Device::getManufacturer, query.getManufacturers())
|
||||||
.eq(StringUtils.hasText(query.getModel()), Device::getManufacturerModel, query.getModel())
|
.eq(StringUtils.hasText(query.getModel()), Device::getManufacturerModel, query.getModel())
|
||||||
.like(StringUtils.hasText(query.getName()), Device::getName, query.getName());
|
.like(StringUtils.hasText(query.getName()), Device::getName, query.getName())
|
||||||
|
.orderByDesc(Device::getCreateTime);
|
||||||
|
|
||||||
IPage<Device> page = spDeviceMapper.selectPage(
|
IPage<Device> page = spDeviceMapper.selectPage(
|
||||||
new Page<>(query.getPageNumber(), query.getPageSize()),
|
new Page<>(query.getPageNumber(), query.getPageSize()),
|
||||||
|
@ -18,6 +18,7 @@ import com.sunyard.chsm.model.entity.KeyTemplate;
|
|||||||
import com.sunyard.chsm.sdf.SdfApiService;
|
import com.sunyard.chsm.sdf.SdfApiService;
|
||||||
import com.sunyard.chsm.sdf.model.EccKey;
|
import com.sunyard.chsm.sdf.model.EccKey;
|
||||||
import com.sunyard.chsm.service.KeyInfoService;
|
import com.sunyard.chsm.service.KeyInfoService;
|
||||||
|
import com.sunyard.chsm.utils.JsonUtils;
|
||||||
import lombok.extern.slf4j.Slf4j;
|
import lombok.extern.slf4j.Slf4j;
|
||||||
import org.apache.commons.codec.binary.Hex;
|
import org.apache.commons.codec.binary.Hex;
|
||||||
import org.springframework.beans.BeanUtils;
|
import org.springframework.beans.BeanUtils;
|
||||||
@ -28,6 +29,8 @@ import org.springframework.util.CollectionUtils;
|
|||||||
import org.springframework.util.StringUtils;
|
import org.springframework.util.StringUtils;
|
||||||
|
|
||||||
import javax.annotation.Resource;
|
import javax.annotation.Resource;
|
||||||
|
import java.nio.charset.StandardCharsets;
|
||||||
|
import java.time.LocalDate;
|
||||||
import java.time.LocalDateTime;
|
import java.time.LocalDateTime;
|
||||||
import java.time.LocalTime;
|
import java.time.LocalTime;
|
||||||
import java.time.temporal.ChronoUnit;
|
import java.time.temporal.ChronoUnit;
|
||||||
@ -64,6 +67,7 @@ public class KeyInfoServiceImpl implements KeyInfoService {
|
|||||||
new LambdaQueryWrapper<KeyInfo>()
|
new LambdaQueryWrapper<KeyInfo>()
|
||||||
.eq(StringUtils.hasText(query.getKeyType()), KeyInfo::getKeyType, query.getKeyType())
|
.eq(StringUtils.hasText(query.getKeyType()), KeyInfo::getKeyType, query.getKeyType())
|
||||||
.eq(StringUtils.hasText(query.getStatus()), KeyInfo::getStatus, query.getStatus())
|
.eq(StringUtils.hasText(query.getStatus()), KeyInfo::getStatus, query.getStatus())
|
||||||
|
.orderByDesc(KeyInfo::getCreateTime)
|
||||||
);
|
);
|
||||||
List<KeyInfo> records = page.getRecords();
|
List<KeyInfo> records = page.getRecords();
|
||||||
if (CollectionUtils.isEmpty(records)) {
|
if (CollectionUtils.isEmpty(records)) {
|
||||||
@ -188,6 +192,30 @@ public class KeyInfoServiceImpl implements KeyInfoService {
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public byte[] backupKey(KeyInfoDTO.Backup backup) {
|
||||||
|
|
||||||
|
LocalDate plussed = backup.getStartTime().plusDays(100);
|
||||||
|
Assert.isTrue(plussed.isAfter(backup.getEndTime()), "备份密钥创建时间范围不能超过100天");
|
||||||
|
List<KeyInfo> keyInfos = keyInfoMapper.selectList(
|
||||||
|
new LambdaQueryWrapper<KeyInfo>()
|
||||||
|
.eq(KeyInfo::getKeyType, backup.getKeyType())
|
||||||
|
.gt(KeyInfo::getCreateTime, LocalDateTime.of(backup.getStartTime(), LocalTime.MIN))
|
||||||
|
.lt(KeyInfo::getCreateTime, LocalDateTime.of(backup.getEndTime(), LocalTime.MAX))
|
||||||
|
);
|
||||||
|
|
||||||
|
StringBuilder builder = new StringBuilder();
|
||||||
|
for (KeyInfo keyInfo : keyInfos) {
|
||||||
|
List<KeyRecord> records = spKeyRecordMapper.selectList(
|
||||||
|
new LambdaQueryWrapper<KeyRecord>()
|
||||||
|
.eq(KeyRecord::getKeyId, keyInfo.getId())
|
||||||
|
);
|
||||||
|
keyInfo.setRecords(records);
|
||||||
|
builder.append(JsonUtils.toJsonString(records)).append(System.lineSeparator());
|
||||||
|
}
|
||||||
|
return builder.toString().getBytes(StandardCharsets.UTF_8);
|
||||||
|
}
|
||||||
|
|
||||||
private KeyRecord genKeyRecord(KeyInfo info) {
|
private KeyRecord genKeyRecord(KeyInfo info) {
|
||||||
KeyRecord record = new KeyRecord();
|
KeyRecord record = new KeyRecord();
|
||||||
record.setId(IdWorker.getId());
|
record.setId(IdWorker.getId());
|
||||||
|
@ -43,7 +43,8 @@ public class KeyTemplateServiceImpl implements KeyTemplateService {
|
|||||||
@Override
|
@Override
|
||||||
public Page<KeyTemplateDTO.View> selectPageList(KeyTemplateDTO.Query query) {
|
public Page<KeyTemplateDTO.View> selectPageList(KeyTemplateDTO.Query query) {
|
||||||
LambdaQueryWrapper<KeyTemplate> wrapper = new LambdaQueryWrapper<KeyTemplate>()
|
LambdaQueryWrapper<KeyTemplate> wrapper = new LambdaQueryWrapper<KeyTemplate>()
|
||||||
.eq(StringUtils.hasText(query.getKeyType()), KeyTemplate::getKeyType, query.getKeyType());
|
.eq(StringUtils.hasText(query.getKeyType()), KeyTemplate::getKeyType, query.getKeyType())
|
||||||
|
.orderByDesc(KeyTemplate::getCreateTime);
|
||||||
|
|
||||||
IPage<KeyTemplate> page = keyTemplateMapper.selectPage(
|
IPage<KeyTemplate> page = keyTemplateMapper.selectPage(
|
||||||
new Page<>(query.getPageNumber(), query.getPageSize()),
|
new Page<>(query.getPageNumber(), query.getPageSize()),
|
||||||
|
@ -9,7 +9,7 @@ import com.fasterxml.jackson.datatype.jsr310.deser.LocalTimeDeserializer;
|
|||||||
import com.fasterxml.jackson.datatype.jsr310.ser.LocalDateSerializer;
|
import com.fasterxml.jackson.datatype.jsr310.ser.LocalDateSerializer;
|
||||||
import com.fasterxml.jackson.datatype.jsr310.ser.LocalDateTimeSerializer;
|
import com.fasterxml.jackson.datatype.jsr310.ser.LocalDateTimeSerializer;
|
||||||
import com.fasterxml.jackson.datatype.jsr310.ser.LocalTimeSerializer;
|
import com.fasterxml.jackson.datatype.jsr310.ser.LocalTimeSerializer;
|
||||||
import com.sunyard.chsm.utils.DateFormatPattern;
|
import com.sunyard.chsm.utils.DateFormat;
|
||||||
import org.springframework.boot.autoconfigure.jackson.Jackson2ObjectMapperBuilderCustomizer;
|
import org.springframework.boot.autoconfigure.jackson.Jackson2ObjectMapperBuilderCustomizer;
|
||||||
import org.springframework.context.annotation.Bean;
|
import org.springframework.context.annotation.Bean;
|
||||||
import org.springframework.context.annotation.Configuration;
|
import org.springframework.context.annotation.Configuration;
|
||||||
@ -19,7 +19,6 @@ import javax.servlet.http.HttpServletRequest;
|
|||||||
import java.time.LocalDate;
|
import java.time.LocalDate;
|
||||||
import java.time.LocalDateTime;
|
import java.time.LocalDateTime;
|
||||||
import java.time.LocalTime;
|
import java.time.LocalTime;
|
||||||
import java.time.format.DateTimeFormatter;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @author liulu
|
* @author liulu
|
||||||
@ -55,14 +54,13 @@ public class WebConfig {
|
|||||||
public Jackson2ObjectMapperBuilderCustomizer objectMapperBuilderCustomizer() {
|
public Jackson2ObjectMapperBuilderCustomizer objectMapperBuilderCustomizer() {
|
||||||
return builder -> {
|
return builder -> {
|
||||||
JavaTimeModule javaTimeModule = new JavaTimeModule();
|
JavaTimeModule javaTimeModule = new JavaTimeModule();
|
||||||
javaTimeModule.addSerializer(LocalTime.class, new LocalTimeSerializer(DateTimeFormatter.ofPattern(DateFormatPattern.HH_MM_SS)));
|
javaTimeModule.addSerializer(LocalTime.class, new LocalTimeSerializer(DateFormat.TIME));
|
||||||
javaTimeModule.addSerializer(LocalDate.class, new LocalDateSerializer(DateTimeFormatter.ofPattern(DateFormatPattern.YYYY_MM_DD)));
|
javaTimeModule.addSerializer(LocalDate.class, new LocalDateSerializer(DateFormat.DATE));
|
||||||
javaTimeModule.addSerializer(LocalDateTime.class, new LocalDateTimeSerializer(DateTimeFormatter.ofPattern(DateFormatPattern.YYYY_MM_DD_HH_MM_SS)));
|
javaTimeModule.addSerializer(LocalDateTime.class, new LocalDateTimeSerializer(DateFormat.DATE_TIME));
|
||||||
|
|
||||||
javaTimeModule.addDeserializer(LocalTime.class, new LocalTimeDeserializer(DateTimeFormatter.ofPattern(DateFormatPattern.HH_MM_SS)));
|
|
||||||
javaTimeModule.addDeserializer(LocalDate.class, new LocalDateDeserializer(DateTimeFormatter.ofPattern(DateFormatPattern.YYYY_MM_DD)));
|
|
||||||
javaTimeModule.addDeserializer(LocalDateTime.class, new LocalDateTimeDeserializer(DateTimeFormatter.ofPattern(DateFormatPattern.YYYY_MM_DD_HH_MM_SS)));
|
|
||||||
|
|
||||||
|
javaTimeModule.addDeserializer(LocalTime.class, new LocalTimeDeserializer(DateFormat.TIME));
|
||||||
|
javaTimeModule.addDeserializer(LocalDate.class, new LocalDateDeserializer(DateFormat.DATE));
|
||||||
|
javaTimeModule.addDeserializer(LocalDateTime.class, new LocalDateTimeDeserializer(DateFormat.DATE_TIME));
|
||||||
builder.modules(javaTimeModule);
|
builder.modules(javaTimeModule);
|
||||||
builder.serializerByType(Long.class, ToStringSerializer.instance);
|
builder.serializerByType(Long.class, ToStringSerializer.instance);
|
||||||
builder.serializationInclusion(JsonInclude.Include.NON_NULL);
|
builder.serializationInclusion(JsonInclude.Include.NON_NULL);
|
||||||
|
Loading…
Reference in New Issue
Block a user