白名单

This commit is contained in:
liulu 2024-11-25 10:20:13 +08:00
parent 8716e97f04
commit 856723e729
8 changed files with 351 additions and 6 deletions

View File

@ -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<IpWhitelist> {
}

View File

@ -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;
}

View File

@ -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<Page<IpWhitelistDTO.IpView>> servicePageList(@RequestBody IpWhitelistDTO.Query query) {
Page<IpWhitelistDTO.IpView> page = iIpWhitelistService.selectPageList(query);
return R.data(page);
}
/**
* 新增白名单
*
* @param save save
* @return
*/
@PostMapping("/save")
@AuditControllerLog(description = "新增白名单", operateType = AuditLogConst.ADD)
public R<Long> 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<Void> 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<Void> delete(@RequestParam Long[] ids) {
iIpWhitelistService.delete(ids);
return R.ok("批量通过id删除数据成功");
}
}

View File

@ -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;
}
}

View File

@ -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<IpWhitelistDTO.IpView> selectPageList(IpWhitelistDTO.Query query);
Long save(IpWhitelistDTO.IpSave save);
void update(IpWhitelistDTO.IpSave save);
void delete(Long[] ids);
}

View File

@ -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<IpWhitelistDTO.IpView> selectPageList(IpWhitelistDTO.Query query) {
LambdaQueryWrapper<IpWhitelist> wrapper = new LambdaQueryWrapper<IpWhitelist>()
.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<IpWhitelist> page = ipWhitelisttMapper.selectPage(
new Page<>(query.getPageNumber(), query.getPageSize()),
wrapper
);
List<IpWhitelist> records = page.getRecords();
if (CollectionUtils.isEmpty(records)) {
return new Page<>(page.getCurrent(), page.getSize(), page.getTotal());
}
List<IpWhitelistDTO.IpView> 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<IpWhitelistDTO.IpView>(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<IpWhitelist>().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<IpWhitelist>().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);
}
}
}

View File

@ -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

View File

@ -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(),