From 856723e729ff73f3d61a46e96404145fdcc9b79d Mon Sep 17 00:00:00 2001 From: liulu Date: Mon, 25 Nov 2024 10:20:13 +0800 Subject: [PATCH] =?UTF-8?q?=E7=99=BD=E5=90=8D=E5=8D=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../chsm/mapper/IpWhitelisttMapper.java | 16 ++ .../chsm/model/entity/IpWhitelist.java | 28 ++++ .../controller/IpWhitelistController.java | 85 +++++++++++ .../com/sunyard/chsm/dto/IpWhitelistDTO.java | 57 +++++++ .../chsm/service/IpWhitelistService.java | 19 +++ .../service/impl/IpWhitelistServiceImpl.java | 142 ++++++++++++++++++ .../src/main/resources/application.yml | 2 +- doc/ssp_dm.sql | 8 +- 8 files changed, 351 insertions(+), 6 deletions(-) create mode 100644 chsm-common/src/main/java/com/sunyard/chsm/mapper/IpWhitelisttMapper.java create mode 100644 chsm-common/src/main/java/com/sunyard/chsm/model/entity/IpWhitelist.java create mode 100644 chsm-web-manage/src/main/java/com/sunyard/chsm/controller/IpWhitelistController.java create mode 100644 chsm-web-manage/src/main/java/com/sunyard/chsm/dto/IpWhitelistDTO.java create mode 100644 chsm-web-manage/src/main/java/com/sunyard/chsm/service/IpWhitelistService.java create mode 100644 chsm-web-manage/src/main/java/com/sunyard/chsm/service/impl/IpWhitelistServiceImpl.java diff --git a/chsm-common/src/main/java/com/sunyard/chsm/mapper/IpWhitelisttMapper.java b/chsm-common/src/main/java/com/sunyard/chsm/mapper/IpWhitelisttMapper.java new file mode 100644 index 0000000..66d747a --- /dev/null +++ b/chsm-common/src/main/java/com/sunyard/chsm/mapper/IpWhitelisttMapper.java @@ -0,0 +1,16 @@ +package com.sunyard.chsm.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.sunyard.chsm.model.entity.IpWhitelist; +import org.apache.ibatis.annotations.Mapper; + +/** + * @author liulu + * @since 2024/11/6 + */ +@Mapper +public interface IpWhitelisttMapper extends BaseMapper { + + + +} diff --git a/chsm-common/src/main/java/com/sunyard/chsm/model/entity/IpWhitelist.java b/chsm-common/src/main/java/com/sunyard/chsm/model/entity/IpWhitelist.java new file mode 100644 index 0000000..63dd8b1 --- /dev/null +++ b/chsm-common/src/main/java/com/sunyard/chsm/model/entity/IpWhitelist.java @@ -0,0 +1,28 @@ +package com.sunyard.chsm.model.entity; + +import com.baomidou.mybatisplus.annotation.TableName; +import lombok.Data; + +import java.time.LocalDateTime; + +/** + * @author liulu + * @since 2024/11/22 + */ +@Data +@TableName("sp_ip_whitelist") +public class IpWhitelist { + + private Long id; + private Long appId; + private String ip; + private String scope; + private String status; + + private String creator; + private String remark; + private LocalDateTime createTime; + private LocalDateTime updateTime; + + +} diff --git a/chsm-web-manage/src/main/java/com/sunyard/chsm/controller/IpWhitelistController.java b/chsm-web-manage/src/main/java/com/sunyard/chsm/controller/IpWhitelistController.java new file mode 100644 index 0000000..6f6dcb4 --- /dev/null +++ b/chsm-web-manage/src/main/java/com/sunyard/chsm/controller/IpWhitelistController.java @@ -0,0 +1,85 @@ +package com.sunyard.chsm.controller; + +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.sunyard.chsm.constant.AuditLogConst; +import com.sunyard.chsm.dto.IpWhitelistDTO; +import com.sunyard.chsm.model.R; +import com.sunyard.chsm.service.IpWhitelistService; +import com.sunyard.ssp.common.annotation.AuditControllerLog; +import org.springframework.web.bind.annotation.DeleteMapping; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.PutMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestParam; +import org.springframework.web.bind.annotation.RestController; + +import javax.annotation.Resource; +import javax.validation.Valid; + +/** + * 访问控制接口 + * + * @author liulu + * @since 2024/11/22 + */ +@RestController +@RequestMapping("/sysconf/ipWhitelist") +public class IpWhitelistController { + + @Resource + private IpWhitelistService iIpWhitelistService; + + /** + * 分页查询设备组列表 + * + * @param query 查询条件 + * @return 分页列表 + */ + @PostMapping("/queryList") + public R> servicePageList(@RequestBody IpWhitelistDTO.Query query) { + + Page page = iIpWhitelistService.selectPageList(query); + + return R.data(page); + } + + /** + * 新增白名单 + * + * @param save save + * @return + */ + @PostMapping("/save") + @AuditControllerLog(description = "新增白名单", operateType = AuditLogConst.ADD) + public R save(@Valid IpWhitelistDTO.IpSave save) { + Long id = iIpWhitelistService.save(save); + return R.data(id); + } + + /** + * 修改白名单 + * + * @param update update + */ + @PutMapping("/update") + @AuditControllerLog(description = "修改白名单", operateType = AuditLogConst.UPDATE) + public R update(@Valid IpWhitelistDTO.IpSave update) { + iIpWhitelistService.update(update); + return R.ok(); + } + + /** + * 删除白名单 + * + * @param ids ids + * @return void + */ + @DeleteMapping("/deleteByIds") + @AuditControllerLog(description = "删除白名单", operateType = AuditLogConst.DELETE) + public R delete(@RequestParam Long[] ids) { + iIpWhitelistService.delete(ids); + return R.ok("批量通过id删除数据成功"); + } + +} diff --git a/chsm-web-manage/src/main/java/com/sunyard/chsm/dto/IpWhitelistDTO.java b/chsm-web-manage/src/main/java/com/sunyard/chsm/dto/IpWhitelistDTO.java new file mode 100644 index 0000000..f6866bc --- /dev/null +++ b/chsm-web-manage/src/main/java/com/sunyard/chsm/dto/IpWhitelistDTO.java @@ -0,0 +1,57 @@ +package com.sunyard.chsm.dto; + +import com.sunyard.chsm.model.PageQuery; +import lombok.Data; +import lombok.EqualsAndHashCode; + +import javax.validation.constraints.Size; +import java.time.LocalDate; +import java.time.LocalDateTime; + +/** + * @author liulu + * @since 2024/11/22 + */ +public abstract class IpWhitelistDTO { + + @EqualsAndHashCode(callSuper = true) + @Data + public static class Query extends PageQuery { + + private String ipAddress; + private LocalDate startDate; + private LocalDate endDate; + private Integer status; + } + + + @Data + public static class IpView { + private Long id; + private String ipAddress; + private String creator; + private Integer status; + private String memo; + private LocalDateTime createTime; + } + + + @Data + public static class IpSave { + private Long id; + /** + * IP地址 + */ + private String ipAddress; + /** + * 备注 + */ + @Size(max = 500, message = "备注长度在1-500之间") + private String memo; + + private Integer status; + } + + + +} diff --git a/chsm-web-manage/src/main/java/com/sunyard/chsm/service/IpWhitelistService.java b/chsm-web-manage/src/main/java/com/sunyard/chsm/service/IpWhitelistService.java new file mode 100644 index 0000000..74ba69c --- /dev/null +++ b/chsm-web-manage/src/main/java/com/sunyard/chsm/service/IpWhitelistService.java @@ -0,0 +1,19 @@ +package com.sunyard.chsm.service; + +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.sunyard.chsm.dto.IpWhitelistDTO; + +/** + * @author liulu + * @since 2024/11/22 + */ +public interface IpWhitelistService { + + Page selectPageList(IpWhitelistDTO.Query query); + + Long save(IpWhitelistDTO.IpSave save); + + void update(IpWhitelistDTO.IpSave save); + + void delete(Long[] ids); +} diff --git a/chsm-web-manage/src/main/java/com/sunyard/chsm/service/impl/IpWhitelistServiceImpl.java b/chsm-web-manage/src/main/java/com/sunyard/chsm/service/impl/IpWhitelistServiceImpl.java new file mode 100644 index 0000000..f476223 --- /dev/null +++ b/chsm-web-manage/src/main/java/com/sunyard/chsm/service/impl/IpWhitelistServiceImpl.java @@ -0,0 +1,142 @@ +package com.sunyard.chsm.service.impl; + +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.baomidou.mybatisplus.core.toolkit.IdWorker; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.sunyard.chsm.dto.IpWhitelistDTO; +import com.sunyard.chsm.enums.EnableStatus; +import com.sunyard.chsm.mapper.IpWhitelisttMapper; +import com.sunyard.chsm.model.entity.IpWhitelist; +import com.sunyard.chsm.service.IpWhitelistService; +import com.sunyard.ssp.utils.SecurityUtil; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; +import org.springframework.util.Assert; +import org.springframework.util.CollectionUtils; +import org.springframework.util.StringUtils; + +import javax.annotation.Resource; +import java.time.LocalDateTime; +import java.time.LocalTime; +import java.util.List; +import java.util.Objects; +import java.util.stream.Collectors; + +/** + * @author liulu + * @since 2024/11/22 + */ +@Slf4j +@Service +@Transactional +public class IpWhitelistServiceImpl implements IpWhitelistService { + + private static final String global = "global"; + private static final String app = "app"; + + @Resource + private IpWhitelisttMapper ipWhitelisttMapper; + @Resource + private SecurityUtil securityUtil; + + + @Override + public Page selectPageList(IpWhitelistDTO.Query query) { + + LambdaQueryWrapper wrapper = new LambdaQueryWrapper() + .eq(IpWhitelist::getScope, global) + .eq(StringUtils.hasText(query.getIpAddress()), IpWhitelist::getIp, query.getIpAddress()) + + .orderByDesc(IpWhitelist::getCreateTime); + if (Objects.nonNull(query.getStartDate())) { + wrapper.gt(IpWhitelist::getCreateTime, LocalDateTime.of(query.getStartDate(), LocalTime.MIN)); + } + if (Objects.nonNull(query.getEndDate())) { + wrapper.lt(IpWhitelist::getCreateTime, LocalDateTime.of(query.getEndDate(), LocalTime.MAX)); + } + if (Objects.nonNull(query.getStatus())) { + wrapper.eq(IpWhitelist::getStatus, query.getStatus() == 0 ? EnableStatus.ENABLED.getCode() : EnableStatus.DISABLED.getCode()); + } + IPage page = ipWhitelisttMapper.selectPage( + new Page<>(query.getPageNumber(), query.getPageSize()), + wrapper + ); + List records = page.getRecords(); + if (CollectionUtils.isEmpty(records)) { + return new Page<>(page.getCurrent(), page.getSize(), page.getTotal()); + } + List viewList = records.stream() + .map(it -> { + IpWhitelistDTO.IpView view = new IpWhitelistDTO.IpView(); + view.setId(it.getId()); + view.setIpAddress(it.getIp()); + view.setStatus(-EnableStatus.of(it.getStatus()).ordinal()); + view.setCreator(it.getCreator()); + view.setMemo(it.getRemark()); + view.setCreateTime(it.getCreateTime()); + return view; + }) + .collect(Collectors.toList()); + + return new Page(page.getCurrent(), page.getSize(), page.getTotal()).setRecords(viewList); + } + + @Override + public Long save(IpWhitelistDTO.IpSave save) { + + Assert.notNull(save.getIpAddress(), "IP地址不能为空"); + IpWhitelist exist = ipWhitelisttMapper.selectOne( + new LambdaQueryWrapper().eq(IpWhitelist::getIp, save.getIpAddress()) + ); + Assert.isNull(exist, "此ip已经存在"); + + IpWhitelist whitelist = new IpWhitelist(); + whitelist.setId(IdWorker.getId()); + whitelist.setAppId(0L); + whitelist.setIp(save.getIpAddress()); + whitelist.setScope(global); + whitelist.setStatus(EnableStatus.ENABLED.getCode()); + whitelist.setCreator(securityUtil.getCurrUser().getRealname()); + whitelist.setCreateTime(LocalDateTime.now()); + whitelist.setRemark(save.getMemo()); + + ipWhitelisttMapper.insert(whitelist); + + return whitelist.getId(); + } + + + @Override + public void update(IpWhitelistDTO.IpSave update) { + + Assert.notNull(update.getId(), "id不能为空"); + + IpWhitelist exist = ipWhitelisttMapper.selectById(update.getId()); + Assert.notNull(exist, "要更新的数据不存在"); + + if (StringUtils.hasText(update.getIpAddress()) + && !Objects.equals(update.getIpAddress(), exist.getIp())) { + IpWhitelist check = ipWhitelisttMapper.selectOne( + new LambdaQueryWrapper().eq(IpWhitelist::getIp, update.getIpAddress()) + ); + Assert.isNull(check, "此ip已经存在"); + } + IpWhitelist whitelist = new IpWhitelist(); + whitelist.setId(update.getId()); + whitelist.setIp(update.getIpAddress()); + whitelist.setStatus(update.getStatus() == 0 ? EnableStatus.ENABLED.getCode() : EnableStatus.DISABLED.getCode()); + whitelist.setUpdateTime(LocalDateTime.now()); + whitelist.setRemark(update.getMemo()); + + ipWhitelisttMapper.updateById(whitelist); + } + + @Override + public void delete(Long[] ids) { + for (Long id : ids) { + ipWhitelisttMapper.deleteById(id); + } + } +} diff --git a/chsm-web-manage/src/main/resources/application.yml b/chsm-web-manage/src/main/resources/application.yml index f49f02f..ef1d50f 100644 --- a/chsm-web-manage/src/main/resources/application.yml +++ b/chsm-web-manage/src/main/resources/application.yml @@ -12,7 +12,7 @@ spring: # 数据源 datasource: driverClassName: dm.jdbc.driver.DmDriver - url: jdbc:dm://172.16.17.236:5236?schema=SSP&useUnicode=true&useJDBCCompliantTimezoneShift=true&useLegacyDatetimeCode=false&serverTimezone=Asia/Shanghai&useSSL=true&characterEncoding=UTF-8 + url: jdbc:dm://172.16.17.236:5236?schema=SUNYARD_SSP&useUnicode=true&useJDBCCompliantTimezoneShift=true&useLegacyDatetimeCode=false&serverTimezone=Asia/Shanghai&useSSL=true&characterEncoding=UTF-8 username: SUNYARD # Jasypt加密 可到common-utils中找到JasyptUtil加解密工具类生成加密结果 格式为ENC(加密结果) password: 123456 diff --git a/doc/ssp_dm.sql b/doc/ssp_dm.sql index 3ac0e57..e5bd8fa 100644 --- a/doc/ssp_dm.sql +++ b/doc/ssp_dm.sql @@ -400,7 +400,7 @@ INSERT INTO SC_PERMISSION (ID, DESCRIPTION, NAME, PARENT_ID, P_TYPE, SORT_ORDER, INSERT INTO SC_PERMISSION (ID, DESCRIPTION, NAME, PARENT_ID, P_TYPE, SORT_ORDER, COMPONENT, PATH, TITLE, ICON, P_LEVEL, BUTTON_TYPE, P_STATUS, URL, NEED_VERIFY) VALUES (216, null, 'mainKeyManagement', 20, 0, 0, 'sys-configuration/keyManagement/index', '/mainKeyManagement', '主密钥管理', 'ios-key', 2, null, 0, null, 0); -INSERT INTO SC_USER (USERNAME, PASSWORD, REALNAME, ORGANIZATION_ID, TEL, EMAIL, STATUS, UPDATE_TIME, POSITION_ID, SEX, AVATAR, PASS_UPDATE_TIME, U_PUBLICKEY) VALUES ('admin1', '$2a$10$9.9KrL/wEMPhxwFf/G3M7OFPnE/ICwWuyE1GRIT1XVXiH7Gksb8XC', '超级管理员', null, null, null, 0, CURRENT_TIMESTAMP(), null, null, null, CURRENT_TIMESTAMP(), ''); +INSERT INTO SC_USER (USERNAME, PASSWORD, REALNAME, ORGANIZATION_ID, TEL, EMAIL, STATUS, UPDATE_TIME, POSITION_ID, SEX, AVATAR, PASS_UPDATE_TIME, U_PUBLICKEY) VALUES ('admin', '$2a$10$9.9KrL/wEMPhxwFf/G3M7OFPnE/ICwWuyE1GRIT1XVXiH7Gksb8XC', '超级管理员', null, null, null, 0, CURRENT_TIMESTAMP(), null, null, null, CURRENT_TIMESTAMP(), ''); SET IDENTITY_INSERT SC_ROLE ON; INSERT INTO SC_ROLE (ID, NAME, DEFAULT_ROLE, DESCRIPTION, DATA_TYPE) VALUES (1, '超级管理员', null, null, null); @@ -436,13 +436,10 @@ INSERT INTO SC_ROLE_PERMISSION (PERMISSION_ID, ROLE_ID) VALUES (186, 1); INSERT INTO SC_ROLE_PERMISSION (PERMISSION_ID, ROLE_ID) VALUES (187, 1); INSERT INTO SC_ROLE_PERMISSION (PERMISSION_ID, ROLE_ID) VALUES (30, 1); INSERT INTO SC_ROLE_PERMISSION (PERMISSION_ID, ROLE_ID) VALUES (20, 1); +INSERT INTO SC_ROLE_PERMISSION (PERMISSION_ID, ROLE_ID) VALUES (216, 1); INSERT INTO SC_ROLE_PERMISSION (PERMISSION_ID, ROLE_ID) VALUES (24, 1); INSERT INTO SC_ROLE_PERMISSION (PERMISSION_ID, ROLE_ID) VALUES (5, 1); INSERT INTO SC_ROLE_PERMISSION (PERMISSION_ID, ROLE_ID) VALUES (32, 1); -INSERT INTO SC_ROLE_PERMISSION (PERMISSION_ID, ROLE_ID) VALUES (25, 1); -INSERT INTO SC_ROLE_PERMISSION (PERMISSION_ID, ROLE_ID) VALUES (29, 1); -INSERT INTO SC_ROLE_PERMISSION (PERMISSION_ID, ROLE_ID) VALUES (28, 1); -INSERT INTO SC_ROLE_PERMISSION (PERMISSION_ID, ROLE_ID) VALUES (78, 1); INSERT INTO SC_ROLE_PERMISSION (PERMISSION_ID, ROLE_ID) VALUES (207, 1); INSERT INTO SC_ROLE_PERMISSION (PERMISSION_ID, ROLE_ID) VALUES (208, 1); INSERT INTO SC_ROLE_PERMISSION (PERMISSION_ID, ROLE_ID) VALUES (205, 1); @@ -708,6 +705,7 @@ CREATE TABLE sp_ip_whitelist ( ip VARCHAR(30) NOT NULL DEFAULT '' COMMENT 'ip', scope VARCHAR(30) NOT NULL DEFAULT '' COMMENT 'app | global', status VARCHAR(30) NOT NULL DEFAULT '' COMMENT '', + creator VARCHAR(30) NOT NULL DEFAULT '' COMMENT '', remark VARCHAR(500) NOT NULL DEFAULT '' COMMENT '备注', update_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP(), create_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP(),