Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
D
datax-cloud
Overview
Overview
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
黄营
datax-cloud
Commits
86f32dc3
Commit
86f32dc3
authored
Apr 14, 2020
by
yuwei
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
2.0.0项目初始化
parent
26195db8
Show whitespace changes
Inline
Side-by-side
Showing
21 changed files
with
906 additions
and
0 deletions
+906
-0
ApiMaskDto.java
...java/cn/datax/service/data/market/api/dto/ApiMaskDto.java
+46
-0
FieldRule.java
.../java/cn/datax/service/data/market/api/dto/FieldRule.java
+27
-0
ApiMaskEntity.java
...n/datax/service/data/market/api/entity/ApiMaskEntity.java
+52
-0
AlgorithmCrypt.java
...n/datax/service/data/market/api/enums/AlgorithmCrypt.java
+32
-0
CipherType.java
...va/cn/datax/service/data/market/api/enums/CipherType.java
+33
-0
RegexCrypt.java
...va/cn/datax/service/data/market/api/enums/RegexCrypt.java
+32
-0
ApiMaskQuery.java
.../cn/datax/service/data/market/api/query/ApiMaskQuery.java
+22
-0
ApiMaskVo.java
...n/java/cn/datax/service/data/market/api/vo/ApiMaskVo.java
+32
-0
pom.xml
...t-service-parent/data-market-service-data-masking/pom.xml
+94
-0
DataMaskingApplication.java
...vice/data/market/data/masking/DataMaskingApplication.java
+22
-0
DataResourceServerConfig.java
.../market/data/masking/config/DataResourceServerConfig.java
+67
-0
SwaggerConfig.java
...ervice/data/market/data/masking/config/SwaggerConfig.java
+104
-0
ApiMaskController.java
...ata/market/data/masking/controller/ApiMaskController.java
+121
-0
ApiMaskDao.java
...atax/service/data/market/data/masking/dao/ApiMaskDao.java
+18
-0
ApiMaskMapper.java
...ice/data/market/data/masking/mapstruct/ApiMaskMapper.java
+20
-0
ApiMaskService.java
...vice/data/market/data/masking/service/ApiMaskService.java
+22
-0
ApiMaskServiceImpl.java
.../market/data/masking/service/impl/ApiMaskServiceImpl.java
+66
-0
ParsedSql.java
...tax/service/data/market/data/masking/utils/ParsedSql.java
+39
-0
bootstrap.yml
...ket-service-data-masking/src/main/resources/bootstrap.yml
+29
-0
spy.properties
...et-service-data-masking/src/main/resources/spy.properties
+26
-0
pom.xml
datax-modules/data-market-service-parent/pom.xml
+2
-0
No files found.
datax-modules/data-market-service-parent/data-market-service-api/src/main/java/cn/datax/service/data/market/api/dto/ApiMaskDto.java
0 → 100644
View file @
86f32dc3
package
cn
.
datax
.
service
.
data
.
market
.
api
.
dto
;
import
cn.datax.common.validate.ValidationGroups
;
import
io.swagger.annotations.ApiModel
;
import
io.swagger.annotations.ApiModelProperty
;
import
lombok.Data
;
import
javax.validation.Valid
;
import
javax.validation.constraints.NotBlank
;
import
javax.validation.constraints.NotEmpty
;
import
javax.validation.constraints.Size
;
import
java.io.Serializable
;
import
java.util.List
;
/**
* <p>
* 数据API脱敏信息表 实体DTO
* </p>
*
* @author yuwei
* @since 2020-04-14
*/
@ApiModel
(
value
=
"数据API脱敏信息表Model"
)
@Data
public
class
ApiMaskDto
implements
Serializable
{
private
static
final
long
serialVersionUID
=
1L
;
@ApiModelProperty
(
value
=
"主键ID"
)
@NotBlank
(
message
=
"主键ID不能为空"
,
groups
=
{
ValidationGroups
.
Update
.
class
})
private
String
id
;
@ApiModelProperty
(
value
=
"数据API"
)
@NotBlank
(
message
=
"数据API不能为空"
,
groups
=
{
ValidationGroups
.
Insert
.
class
,
ValidationGroups
.
Update
.
class
})
private
String
apiId
;
@ApiModelProperty
(
value
=
"脱敏名称"
)
@NotBlank
(
message
=
"脱敏名称不能为空"
,
groups
=
{
ValidationGroups
.
Insert
.
class
,
ValidationGroups
.
Update
.
class
})
private
String
maskName
;
@ApiModelProperty
(
value
=
"脱敏描述"
)
@NotBlank
(
message
=
"脱敏描述不能为空"
,
groups
=
{
ValidationGroups
.
Insert
.
class
,
ValidationGroups
.
Update
.
class
})
private
String
remark
;
@ApiModelProperty
(
value
=
"脱敏字段规则配置"
)
@Valid
@NotEmpty
(
message
=
"脱敏字段规则配置不能为空"
,
groups
=
{
ValidationGroups
.
Insert
.
class
,
ValidationGroups
.
Update
.
class
})
@Size
(
min
=
1
,
message
=
"脱敏字段规则配置长度不能少于{min}位"
)
private
List
<
FieldRule
>
rules
;
}
datax-modules/data-market-service-parent/data-market-service-api/src/main/java/cn/datax/service/data/market/api/dto/FieldRule.java
0 → 100644
View file @
86f32dc3
package
cn
.
datax
.
service
.
data
.
market
.
api
.
dto
;
import
cn.datax.common.validate.ValidationGroups
;
import
io.swagger.annotations.ApiModel
;
import
io.swagger.annotations.ApiModelProperty
;
import
lombok.Data
;
import
javax.validation.constraints.NotBlank
;
import
javax.validation.constraints.NotNull
;
import
java.io.Serializable
;
@ApiModel
(
value
=
"字段信息Model"
)
@Data
public
class
FieldRule
implements
Serializable
{
private
static
final
long
serialVersionUID
=
1L
;
@ApiModelProperty
(
value
=
"字段名称"
)
@NotBlank
(
message
=
"字段名称不能为空"
,
groups
=
{
ValidationGroups
.
Insert
.
class
,
ValidationGroups
.
Update
.
class
})
private
String
fieldName
;
@ApiModelProperty
(
value
=
"脱敏类型"
)
@NotNull
(
message
=
"脱敏类型不能为空"
,
groups
=
{
ValidationGroups
.
Insert
.
class
,
ValidationGroups
.
Update
.
class
})
private
Integer
cipherType
;
@ApiModelProperty
(
value
=
"规则类型"
)
@NotNull
(
message
=
"规则类型不能为空"
,
groups
=
{
ValidationGroups
.
Insert
.
class
,
ValidationGroups
.
Update
.
class
})
private
Integer
cryptType
;
}
datax-modules/data-market-service-parent/data-market-service-api/src/main/java/cn/datax/service/data/market/api/entity/ApiMaskEntity.java
0 → 100644
View file @
86f32dc3
package
cn
.
datax
.
service
.
data
.
market
.
api
.
entity
;
import
cn.datax.service.data.market.api.dto.FieldRule
;
import
com.baomidou.mybatisplus.annotation.TableField
;
import
com.baomidou.mybatisplus.annotation.TableName
;
import
com.baomidou.mybatisplus.annotation.IdType
;
import
com.baomidou.mybatisplus.annotation.TableId
;
import
cn.datax.common.base.BaseEntity
;
import
com.baomidou.mybatisplus.extension.handlers.JacksonTypeHandler
;
import
lombok.Data
;
import
lombok.EqualsAndHashCode
;
import
lombok.experimental.Accessors
;
import
java.util.List
;
/**
* <p>
* 数据API脱敏信息表
* </p>
*
* @author yuwei
* @since 2020-04-14
*/
@Data
@EqualsAndHashCode
(
callSuper
=
true
)
@Accessors
(
chain
=
true
)
@TableName
(
"data_api_mask"
)
public
class
ApiMaskEntity
extends
BaseEntity
{
private
static
final
long
serialVersionUID
=
1L
;
/**
* 数据API
*/
private
String
apiId
;
/**
* 脱敏名称
*/
private
String
maskName
;
/**
* 脱敏描述
*/
private
String
remark
;
/**
* 脱敏字段规则配置
*/
@TableField
(
value
=
"config_json"
,
typeHandler
=
JacksonTypeHandler
.
class
)
private
List
<
FieldRule
>
rules
;
}
datax-modules/data-market-service-parent/data-market-service-api/src/main/java/cn/datax/service/data/market/api/enums/AlgorithmCrypt.java
0 → 100644
View file @
86f32dc3
package
cn
.
datax
.
service
.
data
.
market
.
api
.
enums
;
public
enum
AlgorithmCrypt
{
EMAIL
(
1
,
"邮箱"
);
private
final
Integer
key
;
private
final
String
val
;
AlgorithmCrypt
(
Integer
key
,
String
val
)
{
this
.
key
=
key
;
this
.
val
=
val
;
}
public
Integer
getKey
()
{
return
key
;
}
public
String
getVal
()
{
return
val
;
}
public
static
AlgorithmCrypt
getDataType
(
Integer
algorithmCrypt
)
{
for
(
AlgorithmCrypt
type
:
AlgorithmCrypt
.
values
())
{
if
(
type
.
key
==
algorithmCrypt
)
{
return
type
;
}
}
return
EMAIL
;
}
}
datax-modules/data-market-service-parent/data-market-service-api/src/main/java/cn/datax/service/data/market/api/enums/CipherType.java
0 → 100644
View file @
86f32dc3
package
cn
.
datax
.
service
.
data
.
market
.
api
.
enums
;
public
enum
CipherType
{
REGEX
(
1
,
"正则替换"
),
ALGORITHM
(
2
,
"加密算法"
);
private
final
Integer
key
;
private
final
String
val
;
CipherType
(
Integer
key
,
String
val
)
{
this
.
key
=
key
;
this
.
val
=
val
;
}
public
Integer
getKey
()
{
return
key
;
}
public
String
getVal
()
{
return
val
;
}
public
static
CipherType
getDataType
(
Integer
cipherType
)
{
for
(
CipherType
type
:
CipherType
.
values
())
{
if
(
type
.
key
==
cipherType
)
{
return
type
;
}
}
return
REGEX
;
}
}
datax-modules/data-market-service-parent/data-market-service-api/src/main/java/cn/datax/service/data/market/api/enums/RegexCrypt.java
0 → 100644
View file @
86f32dc3
package
cn
.
datax
.
service
.
data
.
market
.
api
.
enums
;
public
enum
RegexCrypt
{
MD5
(
1
,
"MD5加密"
);
private
final
Integer
key
;
private
final
String
val
;
RegexCrypt
(
Integer
key
,
String
val
)
{
this
.
key
=
key
;
this
.
val
=
val
;
}
public
Integer
getKey
()
{
return
key
;
}
public
String
getVal
()
{
return
val
;
}
public
static
RegexCrypt
getDataType
(
Integer
regexCrypt
)
{
for
(
RegexCrypt
type
:
RegexCrypt
.
values
())
{
if
(
type
.
key
==
regexCrypt
)
{
return
type
;
}
}
return
MD5
;
}
}
datax-modules/data-market-service-parent/data-market-service-api/src/main/java/cn/datax/service/data/market/api/query/ApiMaskQuery.java
0 → 100644
View file @
86f32dc3
package
cn
.
datax
.
service
.
data
.
market
.
api
.
query
;
import
cn.datax.common.base.BaseQueryParams
;
import
lombok.Data
;
import
lombok.EqualsAndHashCode
;
/**
* <p>
* 数据API脱敏信息表 查询实体
* </p>
*
* @author yuwei
* @since 2020-04-14
*/
@Data
@EqualsAndHashCode
(
callSuper
=
true
)
public
class
ApiMaskQuery
extends
BaseQueryParams
{
private
static
final
long
serialVersionUID
=
1L
;
private
String
maskName
;
}
datax-modules/data-market-service-parent/data-market-service-api/src/main/java/cn/datax/service/data/market/api/vo/ApiMaskVo.java
0 → 100644
View file @
86f32dc3
package
cn
.
datax
.
service
.
data
.
market
.
api
.
vo
;
import
cn.datax.service.data.market.api.dto.FieldRule
;
import
com.fasterxml.jackson.annotation.JsonFormat
;
import
lombok.Data
;
import
java.io.Serializable
;
import
java.time.LocalDateTime
;
import
java.util.List
;
/**
* <p>
* 数据API脱敏信息表 实体VO
* </p>
*
* @author yuwei
* @since 2020-04-14
*/
@Data
public
class
ApiMaskVo
implements
Serializable
{
private
static
final
long
serialVersionUID
=
1L
;
private
String
id
;
private
Integer
status
;
@JsonFormat
(
pattern
=
"yyyy-MM-dd HH:mm:ss"
,
timezone
=
"GMT+8"
)
private
LocalDateTime
createTime
;
private
String
apiId
;
private
String
maskName
;
private
String
remark
;
private
List
<
FieldRule
>
rules
;
}
datax-modules/data-market-service-parent/data-market-service-data-masking/pom.xml
0 → 100644
View file @
86f32dc3
<?xml version="1.0" encoding="UTF-8"?>
<project
xmlns=
"http://maven.apache.org/POM/4.0.0"
xmlns:xsi=
"http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation=
"http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"
>
<parent>
<artifactId>
data-market-service-parent
</artifactId>
<groupId>
cn.datax
</groupId>
<version>
2.0.0
</version>
</parent>
<modelVersion>
4.0.0
</modelVersion>
<version>
2.0.0
</version>
<description>
数据脱敏
</description>
<artifactId>
data-market-service-data-masking
</artifactId>
<dependencies>
<!--web 模块-->
<dependency>
<groupId>
org.springframework.boot
</groupId>
<artifactId>
spring-boot-starter-web
</artifactId>
<exclusions>
<exclusion>
<artifactId>
spring-boot-starter-tomcat
</artifactId>
<groupId>
org.springframework.boot
</groupId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>
org.springframework.boot
</groupId>
<artifactId>
spring-boot-starter-undertow
</artifactId>
</dependency>
<!--配置中心客户端 -->
<dependency>
<groupId>
org.springframework.cloud
</groupId>
<artifactId>
spring-cloud-starter-config
</artifactId>
</dependency>
<dependency>
<groupId>
org.mapstruct
</groupId>
<artifactId>
mapstruct
</artifactId>
<version>
${mapstruct.version}
</version>
<scope>
provided
</scope>
</dependency>
<dependency>
<groupId>
org.mapstruct
</groupId>
<artifactId>
mapstruct-processor
</artifactId>
<version>
${mapstruct.version}
</version>
<scope>
provided
</scope>
</dependency>
<dependency>
<groupId>
cn.datax
</groupId>
<artifactId>
datax-common-mybatis
</artifactId>
<version>
2.0.0
</version>
</dependency>
<dependency>
<groupId>
cn.datax
</groupId>
<artifactId>
datax-common-redis
</artifactId>
<version>
2.0.0
</version>
</dependency>
<dependency>
<groupId>
cn.datax
</groupId>
<artifactId>
datax-common-security
</artifactId>
<version>
2.0.0
</version>
</dependency>
<dependency>
<groupId>
cn.datax
</groupId>
<artifactId>
datax-common-database
</artifactId>
<version>
2.0.0
</version>
</dependency>
<dependency>
<groupId>
cn.datax
</groupId>
<artifactId>
datax-common-log
</artifactId>
<version>
2.0.0
</version>
</dependency>
<dependency>
<groupId>
cn.datax
</groupId>
<artifactId>
system-service-api
</artifactId>
<version>
2.0.0
</version>
</dependency>
<dependency>
<groupId>
cn.datax
</groupId>
<artifactId>
data-market-service-api
</artifactId>
<version>
2.0.0
</version>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>
org.springframework.boot
</groupId>
<artifactId>
spring-boot-maven-plugin
</artifactId>
</plugin>
</plugins>
</build>
</project>
\ No newline at end of file
datax-modules/data-market-service-parent/data-market-service-data-masking/src/main/java/cn/datax/service/data/market/data/masking/DataMaskingApplication.java
0 → 100644
View file @
86f32dc3
package
cn
.
datax
.
service
.
data
.
market
.
data
.
masking
;
import
cn.datax.common.log.annotation.EnableDataLog
;
import
cn.datax.common.mybatis.annotation.EnableDataMybatis
;
import
cn.datax.common.redis.annotation.EnableDataRedis
;
import
cn.datax.common.security.annotation.EnableDataServerProtect
;
import
org.springframework.boot.SpringApplication
;
import
org.springframework.cloud.client.SpringCloudApplication
;
import
org.springframework.cloud.openfeign.EnableFeignClients
;
@EnableDataServerProtect
@EnableDataMybatis
@EnableDataRedis
@EnableDataLog
@EnableFeignClients
(
basePackages
=
{
"cn.datax.service.system.api.feign"
,
"cn.datax.service.data.market.api.feign"
})
@SpringCloudApplication
public
class
DataMaskingApplication
{
public
static
void
main
(
String
[]
args
)
{
SpringApplication
.
run
(
DataMaskingApplication
.
class
);
}
}
datax-modules/data-market-service-parent/data-market-service-data-masking/src/main/java/cn/datax/service/data/market/data/masking/config/DataResourceServerConfig.java
0 → 100644
View file @
86f32dc3
package
cn
.
datax
.
service
.
data
.
market
.
data
.
masking
.
config
;
import
cn.datax.common.security.handler.DataAccessDeniedHandler
;
import
cn.datax.common.security.handler.DataAuthExceptionEntryPoint
;
import
cn.datax.common.security.utils.DataRedisTokenServices
;
import
cn.datax.common.security.utils.RedisTokenStore
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.context.annotation.Bean
;
import
org.springframework.context.annotation.Configuration
;
import
org.springframework.data.redis.connection.RedisConnectionFactory
;
import
org.springframework.security.config.annotation.method.configuration.EnableGlobalMethodSecurity
;
import
org.springframework.security.config.annotation.web.builders.HttpSecurity
;
import
org.springframework.security.oauth2.config.annotation.web.configuration.EnableResourceServer
;
import
org.springframework.security.oauth2.config.annotation.web.configuration.ResourceServerConfigurerAdapter
;
import
org.springframework.security.oauth2.config.annotation.web.configurers.ResourceServerSecurityConfigurer
;
import
org.springframework.security.oauth2.provider.token.TokenStore
;
@Configuration
@EnableResourceServer
@EnableGlobalMethodSecurity
(
prePostEnabled
=
true
)
public
class
DataResourceServerConfig
extends
ResourceServerConfigurerAdapter
{
@Autowired
private
DataAccessDeniedHandler
accessDeniedHandler
;
@Autowired
private
DataAuthExceptionEntryPoint
exceptionEntryPoint
;
@Autowired
private
RedisConnectionFactory
redisConnectionFactory
;
@Bean
public
TokenStore
redisTokenStore
()
{
return
new
RedisTokenStore
(
redisConnectionFactory
);
}
@Override
public
void
configure
(
ResourceServerSecurityConfigurer
resources
)
{
DataRedisTokenServices
dataTokenServices
=
new
DataRedisTokenServices
();
dataTokenServices
.
setTokenStore
(
redisTokenStore
());
resources
.
tokenStore
(
redisTokenStore
())
.
tokenServices
(
dataTokenServices
)
.
authenticationEntryPoint
(
exceptionEntryPoint
)
.
accessDeniedHandler
(
accessDeniedHandler
);
}
@Override
public
void
configure
(
HttpSecurity
http
)
throws
Exception
{
//允许使用iframe 嵌套,避免swagger-ui 不被加载的问题
http
.
headers
().
frameOptions
().
disable
();
http
.
authorizeRequests
()
.
antMatchers
(
"/actuator/**"
,
"/v2/api-docs/**"
,
"/swagger-ui.html"
,
"/doc.html"
,
"/swagger-resources/**"
,
"/webjars/**"
,
// API调用
"/v1/**"
).
permitAll
()
.
anyRequest
().
authenticated
()
.
and
().
csrf
().
disable
();
}
}
datax-modules/data-market-service-parent/data-market-service-data-masking/src/main/java/cn/datax/service/data/market/data/masking/config/SwaggerConfig.java
0 → 100644
View file @
86f32dc3
package
cn
.
datax
.
service
.
data
.
market
.
data
.
masking
.
config
;
import
org.springframework.context.annotation.Bean
;
import
org.springframework.context.annotation.Configuration
;
import
org.springframework.web.bind.annotation.RequestMethod
;
import
springfox.documentation.builders.*
;
import
springfox.documentation.schema.ModelRef
;
import
springfox.documentation.service.ApiInfo
;
import
springfox.documentation.service.ApiKey
;
import
springfox.documentation.service.Parameter
;
import
springfox.documentation.service.ResponseMessage
;
import
springfox.documentation.spi.DocumentationType
;
import
springfox.documentation.spring.web.plugins.Docket
;
import
springfox.documentation.swagger2.annotations.EnableSwagger2
;
import
java.util.ArrayList
;
import
java.util.List
;
@Configuration
@EnableSwagger2
public
class
SwaggerConfig
{
/**
* 创建API应用
* apiInfo() 增加API相关信息
* 通过select()函数返回一个ApiSelectorBuilder实例,用来控制哪些接口暴露给Swagger来展现,
* 本例采用指定扫描的包路径来定义指定要建立API的目录。
*
* @return
*/
@Bean
public
Docket
createRestApi
(){
//版本类型是swagger2
return
new
Docket
(
DocumentationType
.
SWAGGER_2
)
//通过调用自定义方法apiInfo,获得文档的主要信息
.
apiInfo
(
apiInfo
())
//设置全局参数
.
globalOperationParameters
(
globalParamBuilder
())
//设置全局响应参数
.
globalResponseMessage
(
RequestMethod
.
GET
,
responseBuilder
())
.
globalResponseMessage
(
RequestMethod
.
POST
,
responseBuilder
())
.
globalResponseMessage
(
RequestMethod
.
PUT
,
responseBuilder
())
.
globalResponseMessage
(
RequestMethod
.
DELETE
,
responseBuilder
())
.
select
()
.
apis
(
RequestHandlerSelectors
.
basePackage
(
"cn.datax.service.data.market.data.masking.controller"
))
//扫描该包下面的API注解
.
paths
(
PathSelectors
.
any
())
.
build
()
//设置安全认证
.
securitySchemes
(
security
());
}
/**
* 创建该API的基本信息(这些基本信息会展现在文档页面中)
* 访问地址:http://项目实际地址/swagger-ui.html
* @return
*/
private
ApiInfo
apiInfo
()
{
return
new
ApiInfoBuilder
()
.
title
(
"数据市场管理中心"
)
//接口管理文档首页显示
.
description
(
"数据市场管理中心接口文档"
)
//API的描述
.
version
(
"1.0"
)
.
build
();
}
/**
* 安全认证参数
* @return
*/
private
List
<
ApiKey
>
security
()
{
List
<
ApiKey
>
apiKeys
=
new
ArrayList
<>();
apiKeys
.
add
(
new
ApiKey
(
"Authorization"
,
"Authorization"
,
"header"
));
return
apiKeys
;
}
/**
* 构建全局参数列表
* @return
*/
private
List
<
Parameter
>
globalParamBuilder
(){
List
<
Parameter
>
pars
=
new
ArrayList
<>();
pars
.
add
(
parameterBuilder
(
"Authorization"
,
"令牌"
,
"string"
,
"header"
,
false
).
build
());
return
pars
;
}
/**
* 创建参数
* @return
*/
private
ParameterBuilder
parameterBuilder
(
String
name
,
String
desc
,
String
type
,
String
parameterType
,
boolean
required
)
{
ParameterBuilder
tokenPar
=
new
ParameterBuilder
();
tokenPar
.
name
(
name
).
description
(
desc
).
modelRef
(
new
ModelRef
(
type
)).
parameterType
(
parameterType
).
required
(
required
).
build
();
return
tokenPar
;
}
/**
* 创建全局响应值
* @return
*/
private
List
<
ResponseMessage
>
responseBuilder
()
{
List
<
ResponseMessage
>
responseMessageList
=
new
ArrayList
<>();
responseMessageList
.
add
(
new
ResponseMessageBuilder
().
code
(
200
).
message
(
"响应成功"
).
build
());
responseMessageList
.
add
(
new
ResponseMessageBuilder
().
code
(
500
).
message
(
"服务器内部错误"
).
build
());
return
responseMessageList
;
}
}
datax-modules/data-market-service-parent/data-market-service-data-masking/src/main/java/cn/datax/service/data/market/data/masking/controller/ApiMaskController.java
0 → 100644
View file @
86f32dc3
package
cn
.
datax
.
service
.
data
.
market
.
data
.
masking
.
controller
;
import
cn.datax.common.core.JsonPage
;
import
cn.datax.common.core.R
;
import
cn.datax.common.validate.ValidationGroups
;
import
cn.datax.service.data.market.api.dto.ApiMaskDto
;
import
cn.datax.service.data.market.api.entity.ApiMaskEntity
;
import
cn.datax.service.data.market.api.vo.ApiMaskVo
;
import
cn.datax.service.data.market.api.query.ApiMaskQuery
;
import
cn.datax.service.data.market.data.masking.mapstruct.ApiMaskMapper
;
import
cn.datax.service.data.market.data.masking.service.ApiMaskService
;
import
com.baomidou.mybatisplus.core.conditions.query.QueryWrapper
;
import
com.baomidou.mybatisplus.core.metadata.IPage
;
import
com.baomidou.mybatisplus.extension.plugins.pagination.Page
;
import
io.swagger.annotations.Api
;
import
io.swagger.annotations.ApiImplicitParam
;
import
io.swagger.annotations.ApiImplicitParams
;
import
io.swagger.annotations.ApiOperation
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.validation.annotation.Validated
;
import
org.springframework.web.bind.annotation.*
;
import
cn.datax.common.base.BaseController
;
import
java.util.List
;
import
java.util.stream.Collectors
;
/**
* <p>
* 数据API脱敏信息表 前端控制器
* </p>
*
* @author yuwei
* @since 2020-04-14
*/
@Api
(
tags
=
{
"数据API脱敏信息表"
})
@RestController
@RequestMapping
(
"/masking/dataApiMask"
)
public
class
ApiMaskController
extends
BaseController
{
@Autowired
private
ApiMaskService
apiMaskService
;
@Autowired
private
ApiMaskMapper
apiMaskMapper
;
/**
* 通过ID查询信息
*
* @param id
* @return
*/
@ApiOperation
(
value
=
"获取详细信息"
,
notes
=
"根据url的id来获取详细信息"
)
@ApiImplicitParam
(
name
=
"id"
,
value
=
"ID"
,
required
=
true
,
dataType
=
"String"
,
paramType
=
"path"
)
@GetMapping
(
"/{id}"
)
public
R
getApiMaskById
(
@PathVariable
String
id
)
{
ApiMaskEntity
apiMaskEntity
=
apiMaskService
.
getById
(
id
);
return
R
.
ok
().
setData
(
apiMaskMapper
.
toVO
(
apiMaskEntity
));
}
/**
* 分页查询信息
*
* @param apiMaskQuery
* @return
*/
@ApiOperation
(
value
=
"分页查询"
,
notes
=
""
)
@ApiImplicitParams
({
@ApiImplicitParam
(
name
=
"apiMaskQuery"
,
value
=
"查询实体apiMaskQuery"
,
required
=
true
,
dataTypeClass
=
ApiMaskQuery
.
class
)
})
@GetMapping
(
"/page"
)
public
R
getRolePage
(
ApiMaskQuery
apiMaskQuery
)
{
QueryWrapper
<
ApiMaskEntity
>
queryWrapper
=
new
QueryWrapper
<>();
IPage
<
ApiMaskEntity
>
page
=
apiMaskService
.
page
(
new
Page
<>(
apiMaskQuery
.
getPageNum
(),
apiMaskQuery
.
getPageSize
()),
queryWrapper
);
List
<
ApiMaskVo
>
collect
=
page
.
getRecords
().
stream
().
map
(
apiMaskMapper:
:
toVO
).
collect
(
Collectors
.
toList
());
JsonPage
<
ApiMaskVo
>
jsonPage
=
new
JsonPage
<>(
page
.
getCurrent
(),
page
.
getSize
(),
page
.
getTotal
(),
collect
);
return
R
.
ok
().
setData
(
jsonPage
);
}
/**
* 添加
* @param apiMask
* @return
*/
@ApiOperation
(
value
=
"添加信息"
,
notes
=
"根据apiMask对象添加信息"
)
@ApiImplicitParam
(
name
=
"apiMask"
,
value
=
"详细实体apiMask"
,
required
=
true
,
dataType
=
"ApiMaskDto"
)
@PostMapping
()
public
R
saveDataApiMask
(
@RequestBody
@Validated
({
ValidationGroups
.
Insert
.
class
})
ApiMaskDto
apiMask
)
{
apiMaskService
.
saveApiMask
(
apiMask
);
return
R
.
ok
();
}
/**
* 修改
* @param apiMask
* @return
*/
@ApiOperation
(
value
=
"修改信息"
,
notes
=
"根据url的id来指定修改对象,并根据传过来的信息来修改详细信息"
)
@ApiImplicitParams
({
@ApiImplicitParam
(
name
=
"id"
,
value
=
"ID"
,
required
=
true
,
dataType
=
"String"
,
paramType
=
"path"
),
@ApiImplicitParam
(
name
=
"apiMask"
,
value
=
"详细实体apiMask"
,
required
=
true
,
dataType
=
"ApiMaskDto"
)
})
@PutMapping
(
"/{id}"
)
public
R
updateApiMask
(
@PathVariable
String
id
,
@RequestBody
@Validated
({
ValidationGroups
.
Update
.
class
})
ApiMaskDto
apiMask
)
{
apiMaskService
.
updateApiMask
(
apiMask
);
return
R
.
ok
();
}
/**
* 删除
* @param id
* @return
*/
@ApiOperation
(
value
=
"删除"
,
notes
=
"根据url的id来指定删除对象"
)
@ApiImplicitParam
(
name
=
"id"
,
value
=
"ID"
,
required
=
true
,
dataType
=
"String"
,
paramType
=
"path"
)
@DeleteMapping
(
"/{id}"
)
public
R
deleteApiMaskById
(
@PathVariable
String
id
)
{
apiMaskService
.
deleteApiMaskById
(
id
);
return
R
.
ok
();
}
}
datax-modules/data-market-service-parent/data-market-service-data-masking/src/main/java/cn/datax/service/data/market/data/masking/dao/ApiMaskDao.java
0 → 100644
View file @
86f32dc3
package
cn
.
datax
.
service
.
data
.
market
.
data
.
masking
.
dao
;
import
cn.datax.common.base.BaseDao
;
import
cn.datax.service.data.market.api.entity.ApiMaskEntity
;
import
org.apache.ibatis.annotations.Mapper
;
/**
* <p>
* 数据API脱敏信息表 Mapper 接口
* </p>
*
* @author yuwei
* @since 2020-04-14
*/
@Mapper
public
interface
ApiMaskDao
extends
BaseDao
<
ApiMaskEntity
>
{
}
datax-modules/data-market-service-parent/data-market-service-data-masking/src/main/java/cn/datax/service/data/market/data/masking/mapstruct/ApiMaskMapper.java
0 → 100644
View file @
86f32dc3
package
cn
.
datax
.
service
.
data
.
market
.
data
.
masking
.
mapstruct
;
import
cn.datax.common.mapstruct.EntityMapper
;
import
cn.datax.service.data.market.api.dto.ApiMaskDto
;
import
cn.datax.service.data.market.api.entity.ApiMaskEntity
;
import
cn.datax.service.data.market.api.vo.ApiMaskVo
;
import
org.mapstruct.Mapper
;
/**
* <p>
* 数据API脱敏信息表 Mapper 实体映射
* </p>
*
* @author yuwei
* @since 2020-04-14
*/
@Mapper
(
componentModel
=
"spring"
)
public
interface
ApiMaskMapper
extends
EntityMapper
<
ApiMaskDto
,
ApiMaskEntity
,
ApiMaskVo
>
{
}
datax-modules/data-market-service-parent/data-market-service-data-masking/src/main/java/cn/datax/service/data/market/data/masking/service/ApiMaskService.java
0 → 100644
View file @
86f32dc3
package
cn
.
datax
.
service
.
data
.
market
.
data
.
masking
.
service
;
import
cn.datax.service.data.market.api.entity.ApiMaskEntity
;
import
cn.datax.service.data.market.api.dto.ApiMaskDto
;
import
cn.datax.common.base.BaseService
;
/**
* <p>
* 数据API脱敏信息表 服务类
* </p>
*
* @author yuwei
* @since 2020-04-14
*/
public
interface
ApiMaskService
extends
BaseService
<
ApiMaskEntity
>
{
void
saveApiMask
(
ApiMaskDto
dataApiMask
);
void
updateApiMask
(
ApiMaskDto
dataApiMask
);
void
deleteApiMaskById
(
String
id
);
}
datax-modules/data-market-service-parent/data-market-service-data-masking/src/main/java/cn/datax/service/data/market/data/masking/service/impl/ApiMaskServiceImpl.java
0 → 100644
View file @
86f32dc3
package
cn
.
datax
.
service
.
data
.
market
.
data
.
masking
.
service
.
impl
;
import
cn.datax.service.data.market.api.entity.ApiMaskEntity
;
import
cn.datax.service.data.market.api.dto.ApiMaskDto
;
import
cn.datax.service.data.market.data.masking.service.ApiMaskService
;
import
cn.datax.service.data.market.data.masking.mapstruct.ApiMaskMapper
;
import
cn.datax.service.data.market.data.masking.dao.ApiMaskDao
;
import
cn.datax.common.base.BaseServiceImpl
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.cache.annotation.CacheConfig
;
import
org.springframework.cache.annotation.CacheEvict
;
import
org.springframework.cache.annotation.CachePut
;
import
org.springframework.cache.annotation.Cacheable
;
import
org.springframework.stereotype.Service
;
import
org.springframework.transaction.annotation.Propagation
;
import
org.springframework.transaction.annotation.Transactional
;
import
java.io.Serializable
;
/**
* <p>
* 数据API脱敏信息表 服务实现类
* </p>
*
* @author yuwei
* @since 2020-04-14
*/
@CacheConfig
(
cacheNames
=
"data:api:masks"
)
@Service
@Transactional
(
propagation
=
Propagation
.
SUPPORTS
,
readOnly
=
true
,
rollbackFor
=
Exception
.
class
)
public
class
ApiMaskServiceImpl
extends
BaseServiceImpl
<
ApiMaskDao
,
ApiMaskEntity
>
implements
ApiMaskService
{
@Autowired
private
ApiMaskDao
apiMaskDao
;
@Autowired
private
ApiMaskMapper
apiMaskMapper
;
@Override
@Transactional
(
rollbackFor
=
Exception
.
class
)
public
void
saveApiMask
(
ApiMaskDto
apiMaskDto
)
{
ApiMaskEntity
apiMask
=
apiMaskMapper
.
toEntity
(
apiMaskDto
);
apiMaskDao
.
insert
(
apiMask
);
}
@CachePut
(
key
=
"#p0.id"
)
@Override
@Transactional
(
rollbackFor
=
Exception
.
class
)
public
void
updateApiMask
(
ApiMaskDto
apiMaskDto
)
{
ApiMaskEntity
apiMask
=
apiMaskMapper
.
toEntity
(
apiMaskDto
);
apiMaskDao
.
updateById
(
apiMask
);
}
@Cacheable
(
key
=
"#id"
,
unless
=
"#result == null"
)
@Override
public
ApiMaskEntity
getById
(
Serializable
id
)
{
return
super
.
getById
(
id
);
}
@CacheEvict
(
key
=
"#id"
)
@Override
@Transactional
(
rollbackFor
=
Exception
.
class
)
public
void
deleteApiMaskById
(
String
id
)
{
apiMaskDao
.
deleteById
(
id
);
}
}
datax-modules/data-market-service-parent/data-market-service-data-masking/src/main/java/cn/datax/service/data/market/data/masking/utils/ParsedSql.java
0 → 100644
View file @
86f32dc3
package
cn
.
datax
.
service
.
data
.
market
.
data
.
masking
.
utils
;
import
org.apache.commons.lang3.StringUtils
;
import
java.io.Serializable
;
public
class
ParsedSql
implements
Serializable
{
private
static
final
long
serialVersionUID
=
1L
;
public
static
void
main
(
String
[]
args
)
{
/**
* 显示前三后四,其他隐藏为星号<例子:187****2488>
*/
String
phone
=
"18771632488"
;
System
.
out
.
println
(
phone
.
replaceAll
(
"(\\d{3}).*(\\d{4})"
,
"$1****$2"
));
/**
* 显示前三后四,其他隐藏为星号<例子:421****464X>
*/
String
idCard
=
"421302199208165464X"
;
System
.
out
.
println
(
idCard
.
replaceAll
(
"(\\d{3}).*(\\w{4})"
,
"$1****$2"
));
/**
* 只显示前三后显示邮箱后缀,其他隐藏为星号<例子:312****@qq.com>
*/
String
email
=
"312075478@qq.com"
;
System
.
out
.
println
(
email
.
replaceAll
(
"(\\w{3}).*@(\\w+)"
,
"$1****@$2"
));
/**
* 只显示第一位,其他隐藏为星号<例子:张**>
*/
String
name
=
"张三"
;
System
.
out
.
println
(
StringUtils
.
rightPad
(
StringUtils
.
left
(
name
,
1
),
StringUtils
.
length
(
name
),
"*"
));
/**
* 显示最后四位,其他隐藏为星号<例子:*************5762>
*/
String
other
=
"4213021992081655762"
;
System
.
out
.
println
(
StringUtils
.
leftPad
(
StringUtils
.
right
(
other
,
4
),
StringUtils
.
length
(
other
),
"*"
));
}
}
datax-modules/data-market-service-parent/data-market-service-data-masking/src/main/resources/bootstrap.yml
0 → 100644
View file @
86f32dc3
server
:
port
:
8817
spring
:
application
:
name
:
datax-service-data-masking
profiles
:
active
:
dev
cloud
:
config
:
fail-fast
:
true
name
:
${spring.application.name}
profile
:
${spring.profiles.active}
discovery
:
enabled
:
true
service-id
:
datax-config
# 注册中心配置
eureka
:
instance
:
lease-renewal-interval-in-seconds
:
20
client
:
register-with-eureka
:
true
fetch-registry
:
true
instance-info-replication-interval-seconds
:
30
registry-fetch-interval-seconds
:
3
service-url
:
defaultZone
:
http://localhost:8610/eureka
\ No newline at end of file
datax-modules/data-market-service-parent/data-market-service-data-masking/src/main/resources/spy.properties
0 → 100644
View file @
86f32dc3
module.log
=
com.p6spy.engine.logging.P6LogFactory,com.p6spy.engine.outage.P6OutageFactory
# 自定义日志打印
logMessageFormat
=
com.baomidou.mybatisplus.extension.p6spy.P6SpyLogger
#日志输出到控制台
appender
=
com.baomidou.mybatisplus.extension.p6spy.StdoutLogger
# 使用日志系统记录 sql
#appender=com.p6spy.engine.spy.appender.Slf4JLogger
# 设置 p6spy driver 代理
deregisterdrivers
=
true
# 取消JDBC URL前缀
useprefix
=
true
# 配置记录 Log 例外,可去掉的结果集有error,info,batch,debug,statement,commit,rollback,result,resultset.
excludecategories
=
info,debug,result,batch,resultset
# 日期格式
dateformat
=
yyyy-MM-dd HH:mm:ss
# 实际驱动可多个
#driverlist=org.h2.Driver
# 是否开启慢SQL记录
outagedetection
=
true
# 慢SQL记录标准 2 秒
outagedetectioninterval
=
2
# 开启过滤
filter
=
true
# 配置不打印的内容
exclude
=
select 1
\ No newline at end of file
datax-modules/data-market-service-parent/pom.xml
View file @
86f32dc3
...
...
@@ -17,5 +17,6 @@
<module>
data-market-service
</module>
<module>
data-market-service-api
</module>
<module>
data-market-service-api-call
</module>
<module>
data-market-service-data-masking
</module>
</modules>
</project>
\ No newline at end of file
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment