Commit 859185cf authored by 陈祥烨's avatar 陈祥烨

AES加密算法

parent 46450f7b
......@@ -2,7 +2,6 @@ package com.yeejoin.amos.api.tool.controller;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.yeejoin.amos.api.tool.face.model.DataBaseModel;
import com.yeejoin.amos.api.tool.face.service.ConnectService;
import com.yeejoin.amos.api.tool.face.service.DataBaseService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
......@@ -29,20 +28,19 @@ public class DataBaseResource {
@Autowired
DataBaseService dataBaseService;
@Autowired
ConnectService connectService ;
/**
* 新增
*/
@TycloudOperation(ApiLevel = UserType.AGENCY,needAuth = false)
@PostMapping(value = "/save")
@ApiOperation(httpMethod = "POST", value = "新增", notes = "新增")
public ResponseModel<DataBaseModel> save(@RequestBody DataBaseModel dataBaseModel) throws SQLException, ClassNotFoundException {
if(connectService.connectNewDatabase(dataBaseModel) != null)
return ResponseHelper.buildResponse(dataBaseService.createWithModel(dataBaseModel));
else
return ResponseHelper.buildResponse(new DataBaseModel());
@TycloudOperation(ApiLevel = UserType.AGENCY, needAuth = false)
@PostMapping(value = "/refresh")
@ApiOperation(httpMethod = "POST", value = "数据库初始化", notes = "数据库初始化")
public ResponseModel<List<DataBaseModel>> save(@RequestBody DataBaseModel dataBaseModel) throws Exception {
List<DataBaseModel> dataBaseModels = dataBaseService.refreshDataBase(dataBaseModel);
if (dataBaseModels == null)
return null;
else
return ResponseHelper.buildResponse(dataBaseModels);
}
/**
......@@ -58,36 +56,35 @@ public class DataBaseResource {
Long[] seq = (Long[]) ConvertUtils.convert(Nbr, Long.class);
Boolean Nbr2[] = new Boolean[Nbr.length];
for (int i = 0;i < Nbr.length;i++){
for (int i = 0; i < Nbr.length; i++) {
Nbr2[i] = dataBaseService.removeById(seq[i]);
}
return ResponseHelper.buildResponse(Nbr2);
return ResponseHelper.buildResponse(Nbr2);
}
/**
* 列表分页查询
*@param current 当前页
*@param current 每页大小
*
* @param current 当前页
* @param current 每页大小
*/
@TycloudOperation(ApiLevel = UserType.AGENCY,needAuth = false)
@TycloudOperation(ApiLevel = UserType.AGENCY, needAuth = false)
@GetMapping(value = "/page")
@ApiOperation(httpMethod = "GET",value = "分页查询", notes = "分页查询")
public ResponseModel<Page<DataBaseModel>> queryForPage(@RequestParam(value = "current") int current, @RequestParam(value = "size") int size)
{
Page<DataBaseModel> page=new Page<DataBaseModel>();
@ApiOperation(httpMethod = "GET", value = "分页查询", notes = "分页查询")
public ResponseModel<Page<DataBaseModel>> queryForPage(@RequestParam(value = "current") int current, @RequestParam(value = "size") int size) {
Page<DataBaseModel> page = new Page<DataBaseModel>();
page.setCurrent(current);
page.setSize(size);
return ResponseHelper.buildResponse(dataBaseService.queryForDataBasePage(page));
}
/**
*列表全部数据查询
* 列表全部数据查询
*/
@TycloudOperation(ApiLevel = UserType.AGENCY,needAuth = false)
@ApiOperation(httpMethod = "GET",value = "列表全部数据查询", notes = "列表全部数据查询")
@TycloudOperation(ApiLevel = UserType.AGENCY, needAuth = false)
@ApiOperation(httpMethod = "GET", value = "列表全部数据查询", notes = "列表全部数据查询")
@GetMapping(value = "/list")
public ResponseModel<List<DataBaseModel>> selectForList()
{
public ResponseModel<List<DataBaseModel>> selectForList() {
return ResponseHelper.buildResponse(dataBaseService.queryForDataBaseList());
}
}
package com.yeejoin.amos.api.tool.controller;
import com.yeejoin.amos.api.tool.face.model.RelationTreeModel;
import com.yeejoin.amos.api.tool.face.service.AgencyTreeService;
import com.yeejoin.amos.api.tool.face.service.ConnectService;
import com.yeejoin.amos.api.tool.face.service.DataBaseService;
import com.yeejoin.amos.api.tool.face.service.RelationService;
import io.swagger.annotations.Api;
......@@ -10,16 +8,12 @@ import io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import org.typroject.tyboot.core.foundation.enumeration.UserType;
import org.typroject.tyboot.core.foundation.utils.StringUtil;
import org.typroject.tyboot.core.restful.doc.TycloudOperation;
import org.typroject.tyboot.core.restful.utils.ResponseHelper;
import org.typroject.tyboot.core.restful.utils.ResponseModel;
import java.sql.Connection;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
@CrossOrigin
@RestController
......@@ -29,8 +23,6 @@ public class RelationResource {
@Autowired
RelationService relationService;
@Autowired
ConnectService connectService;
@Autowired
DataBaseService dataBaseService;
@Autowired
AgencyTreeService agencyTreeService;
......@@ -38,10 +30,10 @@ public class RelationResource {
@TycloudOperation(ApiLevel = UserType.AGENCY,needAuth = false)
@DeleteMapping(value = "/relation/{agencyCodeId}/{sequenceNbrs}")
@ApiOperation(httpMethod = "DELETE", value = "机构删除", notes = "机构删除")
public ResponseModel<String> deleteDataBase(@PathVariable Long agencyCodeId, @PathVariable String sequenceNbrs) throws ClassNotFoundException, SQLException {
public ResponseModel<String> deleteDataBase(@PathVariable Long agencyCodeId, @PathVariable String sequenceNbrs) throws Exception {
Long[] seqs = dataBaseService.stringToLong(sequenceNbrs);
for (Long seq : seqs) {
Connection connection = connectService.connectNewDatabase(dataBaseService.queryBySeq(seq));
Connection connection = dataBaseService.connectNewDatabase(dataBaseService.queryBySeq(seq));
relationService.deleteDataBase(connection,agencyTreeService.queryForAgencyCodeById(agencyCodeId));
}
return ResponseHelper.buildResponse("The data has been deleted !");
......
package com.yeejoin.amos.api.tool.face.annotation;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
/**
* 需要加解密的字段用这个注解
* @author lima
* @date 2023/3/3 17:29
*/
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.FIELD)
public @interface Encrypted {
}
\ No newline at end of file
package com.yeejoin.amos.api.tool.face.annotation;
import java.lang.annotation.ElementType;
import java.lang.annotation.Inherited;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
/**
* 带有敏感字段的类需要加这个注解
* @author lima
* @date 2023/3/6 16:18
*/
@Inherited
@Target({ ElementType.TYPE })
@Retention(RetentionPolicy.RUNTIME)
public @interface SensitiveData {
}
\ No newline at end of file
......@@ -3,20 +3,21 @@ package com.yeejoin.amos.api.tool.face.model;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.NoArgsConstructor;
import org.typroject.tyboot.core.rdbms.model.BaseModel;
/**
* @author r
*/
@EqualsAndHashCode(callSuper = true)
@Data
@NoArgsConstructor
@ApiModel(value = "DataBaseModel", description = "")
public class DataBaseModel extends BaseModel {
private static final long serialVersionUID = 1L;
@ApiModelProperty(value = "数据名称")
private String dataName;
private String dataName = "";
@ApiModelProperty(value = "主机IP")
private String ip;
......@@ -25,11 +26,22 @@ public class DataBaseModel extends BaseModel {
private String port;
@ApiModelProperty(value = "数据库名")
private String dbName;
private String dbName = "";
@ApiModelProperty(value = "用户名")
private String userName;
@ApiModelProperty(value = "密码")
private String passWord;
public DataBaseModel(String dataName, String ip, String port, String dbName, String userName, String passWord) {
this.dataName = dataName;
this.ip = ip;
this.port = port;
this.dbName = dbName;
this.userName = userName;
this.passWord = passWord;
}
}
......@@ -2,12 +2,16 @@ package com.yeejoin.amos.api.tool.face.orm.dao;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.yeejoin.amos.api.tool.face.orm.entity.DataBase;
import org.mapstruct.Mapper;
import org.springframework.stereotype.Repository;
/**
* Mapper 接口
*
* @author r
*/
public interface DataBaseMapper extends BaseMapper<DataBase> {
@Mapper
@Repository
public interface DataBaseMapper extends BaseMapper<DataBase> {
}
......@@ -2,6 +2,8 @@ package com.yeejoin.amos.api.tool.face.orm.entity;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.AllArgsConstructor;
import lombok.NoArgsConstructor;
import org.typroject.tyboot.core.rdbms.orm.entity.BaseEntity;
import lombok.Data;
import lombok.EqualsAndHashCode;
......@@ -10,6 +12,8 @@ import lombok.experimental.Accessors;
* @author r
*/
@Data
@NoArgsConstructor
@AllArgsConstructor
@EqualsAndHashCode(callSuper = true)
@Accessors(chain = true)
@TableName("database_join_record")
......@@ -50,4 +54,5 @@ public class DataBase extends BaseEntity {
*/
@TableField("passWord")
private String passWord;
}
package com.yeejoin.amos.api.tool.face.service;
import com.yeejoin.amos.api.tool.face.model.DataBaseModel;
import com.yeejoin.amos.api.tool.face.orm.dao.DataBaseMapper;
import com.yeejoin.amos.api.tool.face.orm.entity.DataBase;
import org.springframework.stereotype.Service;
import org.typroject.tyboot.core.rdbms.service.BaseService;
import java.sql.*;
import java.util.ArrayList;
import java.util.List;
@Service
public class ConnectService extends BaseService<DataBaseModel, DataBase, DataBaseMapper> {
public List<Connection> connectAllDatabases() {
List<Connection> connections = new ArrayList<>();
// JDBC连接
Connection connection = null;
// Statement statement = null;
// ResultSet resultSet = null;
try {
// 加载数据库驱动
Class.forName("com.mysql.cj.jdbc.Driver");
// 建立数据库连接
// connection = DriverManager.getConnection(url, username, password);
// 创建Statement对象
// statement = connection.createStatement();
// 执行查询语句
// String sql = "SELECT * FROM database_join_record";
// resultSet = statement.executeQuery(sql);
List<DataBaseModel> dataBaseModels = this.queryForList("",false);
// 处理查询结果
for (DataBaseModel dataBaseModel : dataBaseModels){
// 获取结果集中的数据
// String ip = dataBaseModel.getIp();
// String port = resultSet.getString("port");
// String dbName = resultSet.getString("dbName");
// String userName = resultSet.getString("userName");
// String passWord = resultSet.getString("passWord");
// 连接数据库
String dbUrl = "jdbc:mysql://" + dataBaseModel.getIp() + ":" + dataBaseModel.getPort() + "/" + dataBaseModel.getDbName();
Connection dbConnection = DriverManager.getConnection(dbUrl, dataBaseModel.getUserName(), dataBaseModel.getPassWord());
// 将连接添加到列表中
connections.add(dbConnection);
}
} catch (ClassNotFoundException | SQLException e) {
e.printStackTrace();
}
return connections;
}
public Connection connectNewDatabase(DataBaseModel dataBaseModel) throws SQLException, ClassNotFoundException {
// 加载数据库驱动
Class.forName("com.mysql.cj.jdbc.Driver");
// 连接新增的数据库
String dbUrl = "jdbc:mysql://" + dataBaseModel.getIp() + ":" + dataBaseModel.getPort() + "/" + dataBaseModel.getDbName();
return DriverManager.getConnection(dbUrl, dataBaseModel.getUserName(), dataBaseModel.getPassWord());
}
}
package com.yeejoin.amos.api.tool.face.service;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.yeejoin.amos.api.tool.face.model.DataBaseModel;
import com.yeejoin.amos.api.tool.face.orm.dao.DataBaseMapper;
import com.yeejoin.amos.api.tool.face.orm.entity.DataBase;
import com.yeejoin.amos.api.tool.face.util.AESUtils;
import org.apache.commons.beanutils.ConvertUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.typroject.tyboot.core.rdbms.service.BaseService;
import java.sql.*;
import java.util.ArrayList;
import java.util.Collection;
import java.util.List;
/**
* 服务实现类
*
* @author r
*/
@Service
public class DataBaseService extends BaseService<DataBaseModel, DataBase, DataBaseMapper> {
public class DataBaseService extends BaseService<DataBaseModel, DataBase, DataBaseMapper> {
@Autowired
private DataBaseMapper dataBaseMapper;
// public void deleteAll(){
// dataBaseMapper.deleteAll();
// }
/**
* 分页查询
*/
public Page<DataBaseModel> queryForDataBasePage(Page<DataBaseModel> page) {
public Page<DataBaseModel> queryForDataBasePage(Page<DataBaseModel> page) {
return this.queryForPage(page, null, false);
}
/**
* 列表查询 示例
*/
public List<DataBaseModel> queryForDataBaseList() {
return this.queryForList("" , false);
}
public List<DataBaseModel> queryForDbInfoListByApiSource(String apiSource){
return this.queryForList("" , false,apiSource);
public List<DataBaseModel> queryForDataBaseList() {
return this.queryForList("", false);
}
public List<DataBaseModel> queryForDbInfoListByApiSource(String apiSource) {
return this.queryForList("", false, apiSource);
}
public void deleteBySeqs(String sequenceNbrs) {
String Nbr[] = sequenceNbrs.split(",");
Long[] seq = (Long[]) ConvertUtils.convert(Nbr, Long.class);
Boolean Nbr2[] = new Boolean[Nbr.length];
for (int i = 0;i < Nbr.length;i++){
for (int i = 0; i < Nbr.length; i++) {
Nbr2[i] = this.removeById(seq[i]);
}
}
public Long[] stringToLong(String sequenceNbrs){
public Long[] stringToLong(String sequenceNbrs) {
String[] seqs = sequenceNbrs.split(",");
Long[] seq = new Long[seqs.length];
for (int i = 0; i < seqs.length;i++) {
for (int i = 0; i < seqs.length; i++) {
seq[i] = Long.parseLong(seqs[i]);
}
return seq;
}
public String[] getDataBaseName(Connection connection) throws ClassNotFoundException, SQLException {
Statement stmt = connection.createStatement();
ResultSet rs = stmt.executeQuery("SHOW DATABASES");
String[] result = new String[1000];
int count = 0;
while (rs.next()) {
result[count++] = rs.getString(1);
}
return result;
}
public List<DataBaseModel> refreshDataBase(DataBaseModel dataBaseModel) throws Exception {
this.remove(new QueryWrapper<>());
//连接数据库
String url = "jdbc:mysql://" + dataBaseModel.getIp() + ":" + dataBaseModel.getPort() + "/";
String user = dataBaseModel.getUserName();
String pwd = dataBaseModel.getPassWord();
Class.forName("com.mysql.cj.jdbc.Driver");
Connection connection = DriverManager.getConnection(url, user, pwd);
pwd = AESUtils.encrypt(pwd);
if (connection == null)
return null;
List<DataBaseModel> dataBaseModels = new ArrayList<>();
Collection<DataBase> dataBases = new ArrayList<>();
String[] dataBaseName = this.getDataBaseName(connection);
for (String name : dataBaseName) {
if (name == null)
break;
DataBaseModel model = new DataBaseModel(name, dataBaseModel.getIp(), dataBaseModel.getPort(), name, user, pwd);
dataBaseModels.add(model);
DataBase dataBase = this.prepareEntity(model);
dataBases.add(dataBase);
}
this.saveBatch(dataBases);
connection.close();
return dataBaseModels;
}
public Connection connectNewDatabase(DataBaseModel dataBaseModel) throws Exception {
// 加载数据库驱动
Class.forName("com.mysql.cj.jdbc.Driver");
// 连接新增的数据库
String dbUrl = "jdbc:mysql://" + dataBaseModel.getIp() + ":" + dataBaseModel.getPort() + "/" + dataBaseModel.getDbName();
dataBaseModel.setPassWord(AESUtils.decrypt(dataBaseModel.getPassWord()));
return DriverManager.getConnection(dbUrl, dataBaseModel.getUserName(), dataBaseModel.getPassWord());
}
}
......@@ -19,8 +19,6 @@ public class RelationService extends BaseService<RelationModel, Relation, Relati
@Autowired
DataBaseService dataBaseService;
@Autowired
ConnectService connectService;
/**
......@@ -125,12 +123,6 @@ public class RelationService extends BaseService<RelationModel, Relation, Relati
public List<RelationTreeModel> createRelationTree(Connection connection) throws SQLException {
List<HashMap<String, String>> maps = this.queryRelation(connection);
List<RelationTreeModel> trees = new ArrayList<>();
// for (RelationTreeModel root: createNodes(maps)){
// if(root.getParentName().equals("")){
//// System.out.println(root);
// trees.addAll(createTree(createNodes(maps),""));
// }
// }
trees.addAll(createTree(createNodes(maps), ""));
return trees;
}
......
package com.yeejoin.amos.api.tool.face.util;
import javax.crypto.Cipher;
import javax.crypto.spec.SecretKeySpec;
import java.util.Base64;
/**
* 加解密工具类
* @author lima
* @date 2023/3/3 16:56
*/
public class AESUtils {
private static final String ALGORITHM = "AES";
private static final String SECRET_KEY = "aes-key-lima1995"; // 密钥
/**
* 加密
*/
public static String encrypt(String value) throws Exception {
SecretKeySpec keySpec = new SecretKeySpec(SECRET_KEY.getBytes(), ALGORITHM);
Cipher cipher = Cipher.getInstance(ALGORITHM);
cipher.init(Cipher.ENCRYPT_MODE, keySpec);
byte[] encrypted = cipher.doFinal(value.getBytes());
return Base64.getEncoder().encodeToString(encrypted);
}
/**
* 解密
*/
public static String decrypt(String value) throws Exception {
SecretKeySpec keySpec = new SecretKeySpec(SECRET_KEY.getBytes(), ALGORITHM);
Cipher cipher = Cipher.getInstance(ALGORITHM);
cipher.init(Cipher.DECRYPT_MODE, keySpec);
byte[] decoded = Base64.getDecoder().decode(value);
byte[] decrypted = cipher.doFinal(decoded);
return new String(decrypted);
}
}
\ No newline at end of file
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