白名单

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: datasource:
driverClassName: dm.jdbc.driver.DmDriver 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 username: SUNYARD
# Jasypt加密 可到common-utils中找到JasyptUtil加解密工具类生成加密结果 格式为ENC(加密结果) # Jasypt加密 可到common-utils中找到JasyptUtil加解密工具类生成加密结果 格式为ENC(加密结果)
password: 123456 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_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 SET IDENTITY_INSERT SC_ROLE ON
INSERT INTO SC_ROLE (ID, NAME, DEFAULT_ROLE, DESCRIPTION, DATA_TYPE) VALUES (1, '超级管理员', null, null, null); 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 (187, 1);
INSERT INTO SC_ROLE_PERMISSION (PERMISSION_ID, ROLE_ID) VALUES (30, 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 (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 (24, 1);
INSERT INTO SC_ROLE_PERMISSION (PERMISSION_ID, ROLE_ID) VALUES (5, 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 (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 (207, 1);
INSERT INTO SC_ROLE_PERMISSION (PERMISSION_ID, ROLE_ID) VALUES (208, 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); 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', ip VARCHAR(30) NOT NULL DEFAULT '' COMMENT 'ip',
scope VARCHAR(30) NOT NULL DEFAULT '' COMMENT 'app | global', scope VARCHAR(30) NOT NULL DEFAULT '' COMMENT 'app | global',
status VARCHAR(30) NOT NULL DEFAULT '' COMMENT '', status VARCHAR(30) NOT NULL DEFAULT '' COMMENT '',
creator VARCHAR(30) NOT NULL DEFAULT '' COMMENT '',
remark VARCHAR(500) NOT NULL DEFAULT '' COMMENT '备注', remark VARCHAR(500) NOT NULL DEFAULT '' COMMENT '备注',
update_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP(), update_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP(),
create_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP(), create_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP(),