Skip to content
项目
群组
代码片段
帮助
当前项目
正在载入...
登录 / 注册
切换导航面板
Y
yudao-cloud
项目
项目
详情
活动
周期分析
仓库
仓库
文件
提交
分支
标签
贡献者
图表
比较
统计图
议题
0
议题
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
CI / CD
CI / CD
流水线
作业
日程
统计图
Wiki
Wiki
代码片段
代码片段
成员
成员
折叠边栏
关闭边栏
活动
图像
聊天
创建新问题
作业
提交
问题看板
Open sidebar
hblj
yudao-cloud
Commits
fb577ca7
提交
fb577ca7
authored
1月 20, 2023
作者:
gaibu
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
feat:脱敏组件
上级
a464c805
隐藏空白字符变更
内嵌
并排
正在显示
35 个修改的文件
包含
1106 行增加
和
7 行删除
+1106
-7
pom.xml
yudao-dependencies/pom.xml
+5
-0
pom.xml
yudao-framework/pom.xml
+1
-0
pom.xml
...o-framework/yudao-spring-boot-starter-desensitize/pom.xml
+38
-0
DesensitizeBy.java
...ework/desensitize/core/base/annotation/DesensitizeBy.java
+32
-0
DesensitizationHandler.java
...desensitize/core/base/handler/DesensitizationHandler.java
+21
-0
StringDesensitizeSerializer.java
...ize/core/base/serializer/StringDesensitizeSerializer.java
+92
-0
package-info.java
...ocoder/yudao/framework/desensitize/core/package-info.java
+4
-0
EmailDesensitize.java
...k/desensitize/core/regex/annotation/EmailDesensitize.java
+36
-0
RegexDesensitize.java
...k/desensitize/core/regex/annotation/RegexDesensitize.java
+38
-0
AbstractRegexDesensitizationHandler.java
...re/regex/handler/AbstractRegexDesensitizationHandler.java
+38
-0
DefaultRegexDesensitizationHandler.java
...ore/regex/handler/DefaultRegexDesensitizationHandler.java
+21
-0
EmailDesensitizationHandler.java
...itize/core/regex/handler/EmailDesensitizationHandler.java
+22
-0
BankCardDesensitize.java
...sensitize/core/slider/annotation/BankCardDesensitize.java
+40
-0
CarLicenseDesensitize.java
...nsitize/core/slider/annotation/CarLicenseDesensitize.java
+40
-0
ChineseNameDesensitize.java
...sitize/core/slider/annotation/ChineseNameDesensitize.java
+40
-0
FixedPhoneDesensitize.java
...nsitize/core/slider/annotation/FixedPhoneDesensitize.java
+40
-0
IdCardDesensitize.java
...desensitize/core/slider/annotation/IdCardDesensitize.java
+40
-0
MobileDesensitize.java
...desensitize/core/slider/annotation/MobileDesensitize.java
+40
-0
PasswordDesensitize.java
...sensitize/core/slider/annotation/PasswordDesensitize.java
+42
-0
SliderDesensitize.java
...desensitize/core/slider/annotation/SliderDesensitize.java
+42
-0
AbstractDesensitizationHandler.java
...e/core/slider/handler/AbstractDesensitizationHandler.java
+78
-0
BankCardDesensitization.java
...ensitize/core/slider/handler/BankCardDesensitization.java
+27
-0
CarLicenseDesensitization.java
...sitize/core/slider/handler/CarLicenseDesensitization.java
+25
-0
ChineseNameDesensitization.java
...itize/core/slider/handler/ChineseNameDesensitization.java
+27
-0
DefaultDesensitizationHandler.java
...ze/core/slider/handler/DefaultDesensitizationHandler.java
+25
-0
FixedPhoneDesensitization.java
...sitize/core/slider/handler/FixedPhoneDesensitization.java
+25
-0
IdCardDesensitization.java
...esensitize/core/slider/handler/IdCardDesensitization.java
+25
-0
MobileDesensitization.java
...esensitize/core/slider/handler/MobileDesensitization.java
+26
-0
PasswordDesensitization.java
...ensitize/core/slider/handler/PasswordDesensitization.java
+25
-0
DesensitizeTest.java
...der/yudao/framework/desensitize/core/DesensitizeTest.java
+97
-0
Address.java
.../yudao/framework/desensitize/core/annotation/Address.java
+30
-0
AddressHandler.java
...ao/framework/desensitize/core/handler/AddressHandler.java
+19
-0
SpringFoxHandlerProviderBeanPostProcessor.java
...agger/core/SpringFoxHandlerProviderBeanPostProcessor.java
+1
-2
YudaoWebAutoConfiguration.java
...yudao/framework/web/config/YudaoWebAutoConfiguration.java
+3
-2
GlobalExceptionHandler.java
...ao/framework/web/core/handler/GlobalExceptionHandler.java
+1
-3
没有找到文件。
yudao-dependencies/pom.xml
浏览文件 @
fb577ca7
...
@@ -162,6 +162,11 @@
...
@@ -162,6 +162,11 @@
<artifactId>
yudao-spring-boot-starter-captcha
</artifactId>
<artifactId>
yudao-spring-boot-starter-captcha
</artifactId>
<version>
${revision}
</version>
<version>
${revision}
</version>
</dependency>
</dependency>
<dependency>
<groupId>
cn.iocoder.cloud
</groupId>
<artifactId>
yudao-spring-boot-starter-desensitize
</artifactId>
<version>
${revision}
</version>
</dependency>
<!-- Spring 核心 -->
<!-- Spring 核心 -->
<dependency>
<dependency>
...
...
yudao-framework/pom.xml
浏览文件 @
fb577ca7
...
@@ -43,6 +43,7 @@
...
@@ -43,6 +43,7 @@
<module>
yudao-spring-boot-starter-flowable
</module>
<module>
yudao-spring-boot-starter-flowable
</module>
<module>
yudao-spring-boot-starter-captcha
</module>
<module>
yudao-spring-boot-starter-captcha
</module>
<module>
yudao-spring-boot-starter-desensitize
</module>
</modules>
</modules>
<artifactId>
yudao-framework
</artifactId>
<artifactId>
yudao-framework
</artifactId>
...
...
yudao-framework/yudao-spring-boot-starter-desensitize/pom.xml
0 → 100644
浏览文件 @
fb577ca7
<?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"
>
<modelVersion>
4.0.0
</modelVersion>
<parent>
<groupId>
cn.iocoder.cloud
</groupId>
<artifactId>
yudao-framework
</artifactId>
<version>
${revision}
</version>
</parent>
<artifactId>
yudao-spring-boot-starter-desensitize
</artifactId>
<description>
脱敏组件:支持 JSON 返回数据时,将邮箱、手机等字段进行脱敏
</description>
<dependencies>
<dependency>
<groupId>
cn.iocoder.cloud
</groupId>
<artifactId>
yudao-common
</artifactId>
</dependency>
<!-- jackson -->
<dependency>
<groupId>
com.fasterxml.jackson.core
</groupId>
<artifactId>
jackson-annotations
</artifactId>
</dependency>
<dependency>
<groupId>
com.fasterxml.jackson.core
</groupId>
<artifactId>
jackson-databind
</artifactId>
</dependency>
<!-- Test 测试相关 -->
<dependency>
<groupId>
cn.iocoder.cloud
</groupId>
<artifactId>
yudao-spring-boot-starter-test
</artifactId>
<scope>
test
</scope>
</dependency>
</dependencies>
</project>
yudao-framework/yudao-spring-boot-starter-desensitize/src/main/java/cn/iocoder/yudao/framework/desensitize/core/base/annotation/DesensitizeBy.java
0 → 100644
浏览文件 @
fb577ca7
package
cn
.
iocoder
.
yudao
.
framework
.
desensitize
.
core
.
base
.
annotation
;
import
cn.iocoder.yudao.framework.desensitize.core.base.handler.DesensitizationHandler
;
import
cn.iocoder.yudao.framework.desensitize.core.base.serializer.StringDesensitizeSerializer
;
import
com.fasterxml.jackson.annotation.JacksonAnnotationsInside
;
import
com.fasterxml.jackson.databind.annotation.JsonSerialize
;
import
java.lang.annotation.Documented
;
import
java.lang.annotation.ElementType
;
import
java.lang.annotation.Retention
;
import
java.lang.annotation.RetentionPolicy
;
import
java.lang.annotation.Target
;
/**
* 顶级脱敏注解,自定义注解需要使用此注解
*
* @author gaibu
*/
@Documented
@Target
(
ElementType
.
ANNOTATION_TYPE
)
@Retention
(
RetentionPolicy
.
RUNTIME
)
@JacksonAnnotationsInside
// 此注解是其他所有 jackson 注解的元注解,打上了此注解的注解表明是 jackson 注解的一部分
@JsonSerialize
(
using
=
StringDesensitizeSerializer
.
class
)
// 指定序列化器
public
@interface
DesensitizeBy
{
/**
* 脱敏处理器
*/
@SuppressWarnings
(
"rawtypes"
)
Class
<?
extends
DesensitizationHandler
>
handler
();
}
yudao-framework/yudao-spring-boot-starter-desensitize/src/main/java/cn/iocoder/yudao/framework/desensitize/core/base/handler/DesensitizationHandler.java
0 → 100644
浏览文件 @
fb577ca7
package
cn
.
iocoder
.
yudao
.
framework
.
desensitize
.
core
.
base
.
handler
;
import
java.lang.annotation.Annotation
;
/**
* 脱敏处理器接口
*
* @author gaibu
*/
public
interface
DesensitizationHandler
<
T
extends
Annotation
>
{
/**
* 脱敏
*
* @param origin 原始字符串
* @param annotation 注解信息
* @return 脱敏后的字符串
*/
String
desensitize
(
String
origin
,
T
annotation
);
}
yudao-framework/yudao-spring-boot-starter-desensitize/src/main/java/cn/iocoder/yudao/framework/desensitize/core/base/serializer/StringDesensitizeSerializer.java
0 → 100644
浏览文件 @
fb577ca7
package
cn
.
iocoder
.
yudao
.
framework
.
desensitize
.
core
.
base
.
serializer
;
import
cn.hutool.core.annotation.AnnotationUtil
;
import
cn.hutool.core.lang.Singleton
;
import
cn.hutool.core.util.ArrayUtil
;
import
cn.hutool.core.util.ReflectUtil
;
import
cn.hutool.core.util.StrUtil
;
import
cn.iocoder.yudao.framework.desensitize.core.base.annotation.DesensitizeBy
;
import
cn.iocoder.yudao.framework.desensitize.core.base.handler.DesensitizationHandler
;
import
com.fasterxml.jackson.core.JsonGenerator
;
import
com.fasterxml.jackson.databind.BeanProperty
;
import
com.fasterxml.jackson.databind.JsonSerializer
;
import
com.fasterxml.jackson.databind.SerializerProvider
;
import
com.fasterxml.jackson.databind.ser.ContextualSerializer
;
import
com.fasterxml.jackson.databind.ser.std.StdSerializer
;
import
lombok.Getter
;
import
lombok.Setter
;
import
java.io.IOException
;
import
java.lang.annotation.Annotation
;
import
java.lang.reflect.Field
;
/**
* 脱敏序列化器
*
* 实现 JSON 返回数据时,使用 {@link DesensitizationHandler} 对声明脱敏注解的字段,进行脱敏处理。
*
* @author gaibu
*/
@SuppressWarnings
(
"rawtypes"
)
public
class
StringDesensitizeSerializer
extends
StdSerializer
<
String
>
implements
ContextualSerializer
{
@Getter
@Setter
private
DesensitizationHandler
desensitizationHandler
;
protected
StringDesensitizeSerializer
()
{
super
(
String
.
class
);
}
@Override
public
JsonSerializer
<?>
createContextual
(
SerializerProvider
serializerProvider
,
BeanProperty
beanProperty
)
{
DesensitizeBy
annotation
=
beanProperty
.
getAnnotation
(
DesensitizeBy
.
class
);
if
(
annotation
==
null
)
{
return
this
;
}
// 创建一个 StringDesensitizeSerializer 对象,使用 DesensitizeBy 对应的处理器
StringDesensitizeSerializer
serializer
=
new
StringDesensitizeSerializer
();
serializer
.
setDesensitizationHandler
(
Singleton
.
get
(
annotation
.
handler
()));
return
serializer
;
}
@Override
@SuppressWarnings
(
"unchecked"
)
public
void
serialize
(
String
value
,
JsonGenerator
gen
,
SerializerProvider
serializerProvider
)
throws
IOException
{
if
(
StrUtil
.
isBlank
(
value
))
{
gen
.
writeNull
();
return
;
}
// 获取序列化字段
Field
field
=
getField
(
gen
);
// 自定义处理器
DesensitizeBy
[]
annotations
=
AnnotationUtil
.
getCombinationAnnotations
(
field
,
DesensitizeBy
.
class
);
if
(
ArrayUtil
.
isEmpty
(
annotations
))
{
gen
.
writeString
(
value
);
return
;
}
for
(
Annotation
annotation
:
field
.
getAnnotations
())
{
if
(
AnnotationUtil
.
hasAnnotation
(
annotation
.
annotationType
(),
DesensitizeBy
.
class
))
{
value
=
this
.
desensitizationHandler
.
desensitize
(
value
,
annotation
);
gen
.
writeString
(
value
);
return
;
}
}
gen
.
writeString
(
value
);
}
/**
* 获取字段
*
* @param generator JsonGenerator
* @return 字段
*/
private
Field
getField
(
JsonGenerator
generator
)
{
String
currentName
=
generator
.
getOutputContext
().
getCurrentName
();
Object
currentValue
=
generator
.
getCurrentValue
();
Class
<?>
currentValueClass
=
currentValue
.
getClass
();
return
ReflectUtil
.
getField
(
currentValueClass
,
currentName
);
}
}
yudao-framework/yudao-spring-boot-starter-desensitize/src/main/java/cn/iocoder/yudao/framework/desensitize/core/package-info.java
0 → 100644
浏览文件 @
fb577ca7
/**
* 脱敏组件:支持 JSON 返回数据时,将邮箱、手机等字段进行脱敏
*/
package
cn
.
iocoder
.
yudao
.
framework
.
desensitize
.
core
;
yudao-framework/yudao-spring-boot-starter-desensitize/src/main/java/cn/iocoder/yudao/framework/desensitize/core/regex/annotation/EmailDesensitize.java
0 → 100644
浏览文件 @
fb577ca7
package
cn
.
iocoder
.
yudao
.
framework
.
desensitize
.
core
.
regex
.
annotation
;
import
cn.iocoder.yudao.framework.desensitize.core.base.annotation.DesensitizeBy
;
import
cn.iocoder.yudao.framework.desensitize.core.regex.handler.EmailDesensitizationHandler
;
import
com.fasterxml.jackson.annotation.JacksonAnnotationsInside
;
import
java.lang.annotation.Documented
;
import
java.lang.annotation.ElementType
;
import
java.lang.annotation.Retention
;
import
java.lang.annotation.RetentionPolicy
;
import
java.lang.annotation.Target
;
/**
* 邮箱脱敏注解
*
* @author gaibu
*/
@Documented
@Target
({
ElementType
.
FIELD
})
@Retention
(
RetentionPolicy
.
RUNTIME
)
@JacksonAnnotationsInside
@DesensitizeBy
(
handler
=
EmailDesensitizationHandler
.
class
)
public
@interface
EmailDesensitize
{
/**
* 匹配的正则表达式
*/
String
regex
()
default
"(^.)[^@]*(@.*$)"
;
/**
* 替换规则,邮箱;
*
* 比如:example@gmail.com 脱敏之后 为e****@gmail.com
*/
String
replacer
()
default
"$1****$2"
;
}
yudao-framework/yudao-spring-boot-starter-desensitize/src/main/java/cn/iocoder/yudao/framework/desensitize/core/regex/annotation/RegexDesensitize.java
0 → 100644
浏览文件 @
fb577ca7
package
cn
.
iocoder
.
yudao
.
framework
.
desensitize
.
core
.
regex
.
annotation
;
import
cn.iocoder.yudao.framework.desensitize.core.base.annotation.DesensitizeBy
;
import
cn.iocoder.yudao.framework.desensitize.core.regex.handler.DefaultRegexDesensitizationHandler
;
import
com.fasterxml.jackson.annotation.JacksonAnnotationsInside
;
import
java.lang.annotation.Documented
;
import
java.lang.annotation.ElementType
;
import
java.lang.annotation.Retention
;
import
java.lang.annotation.RetentionPolicy
;
import
java.lang.annotation.Target
;
/**
* 正则脱敏注解
*
* @author gaibu
*/
@Documented
@Target
({
ElementType
.
FIELD
,
ElementType
.
ANNOTATION_TYPE
})
@Retention
(
RetentionPolicy
.
RUNTIME
)
@JacksonAnnotationsInside
@DesensitizeBy
(
handler
=
DefaultRegexDesensitizationHandler
.
class
)
public
@interface
RegexDesensitize
{
/**
* 匹配的正则表达式(默认匹配所有)
*/
String
regex
()
default
"^[\\s\\S]*$"
;
/**
* 替换规则,会将匹配到的字符串全部替换成 replacer
*
* 例如:regex=123; replacer=******
* 原始字符串 123456789
* 脱敏后字符串 ******456789
*/
String
replacer
()
default
"******"
;
}
yudao-framework/yudao-spring-boot-starter-desensitize/src/main/java/cn/iocoder/yudao/framework/desensitize/core/regex/handler/AbstractRegexDesensitizationHandler.java
0 → 100644
浏览文件 @
fb577ca7
package
cn
.
iocoder
.
yudao
.
framework
.
desensitize
.
core
.
regex
.
handler
;
import
cn.iocoder.yudao.framework.desensitize.core.base.handler.DesensitizationHandler
;
import
java.lang.annotation.Annotation
;
/**
* 正则表达式脱敏处理器抽象类,已实现通用的方法
*
* @author gaibu
*/
public
abstract
class
AbstractRegexDesensitizationHandler
<
T
extends
Annotation
>
implements
DesensitizationHandler
<
T
>
{
@Override
public
String
desensitize
(
String
origin
,
T
annotation
)
{
String
regex
=
getRegex
(
annotation
);
String
replacer
=
getReplacer
(
annotation
);
return
origin
.
replaceAll
(
regex
,
replacer
);
}
/**
* 获取注解上的 regex 参数
*
* @param annotation 注解信息
* @return 正则表达式
*/
abstract
String
getRegex
(
T
annotation
);
/**
* 获取注解上的 replacer 参数
*
* @param annotation 注解信息
* @return 待替换的字符串
*/
abstract
String
getReplacer
(
T
annotation
);
}
yudao-framework/yudao-spring-boot-starter-desensitize/src/main/java/cn/iocoder/yudao/framework/desensitize/core/regex/handler/DefaultRegexDesensitizationHandler.java
0 → 100644
浏览文件 @
fb577ca7
package
cn
.
iocoder
.
yudao
.
framework
.
desensitize
.
core
.
regex
.
handler
;
import
cn.iocoder.yudao.framework.desensitize.core.regex.annotation.RegexDesensitize
;
/**
* {@link RegexDesensitize} 的正则脱敏处理器
*
* @author gaibu
*/
public
class
DefaultRegexDesensitizationHandler
extends
AbstractRegexDesensitizationHandler
<
RegexDesensitize
>
{
@Override
String
getRegex
(
RegexDesensitize
annotation
)
{
return
annotation
.
regex
();
}
@Override
String
getReplacer
(
RegexDesensitize
annotation
)
{
return
annotation
.
replacer
();
}
}
yudao-framework/yudao-spring-boot-starter-desensitize/src/main/java/cn/iocoder/yudao/framework/desensitize/core/regex/handler/EmailDesensitizationHandler.java
0 → 100644
浏览文件 @
fb577ca7
package
cn
.
iocoder
.
yudao
.
framework
.
desensitize
.
core
.
regex
.
handler
;
import
cn.iocoder.yudao.framework.desensitize.core.regex.annotation.EmailDesensitize
;
/**
* {@link EmailDesensitize} 的脱敏处理器
*
* @author gaibu
*/
public
class
EmailDesensitizationHandler
extends
AbstractRegexDesensitizationHandler
<
EmailDesensitize
>
{
@Override
String
getRegex
(
EmailDesensitize
annotation
)
{
return
annotation
.
regex
();
}
@Override
String
getReplacer
(
EmailDesensitize
annotation
)
{
return
annotation
.
replacer
();
}
}
yudao-framework/yudao-spring-boot-starter-desensitize/src/main/java/cn/iocoder/yudao/framework/desensitize/core/slider/annotation/BankCardDesensitize.java
0 → 100644
浏览文件 @
fb577ca7
package
cn
.
iocoder
.
yudao
.
framework
.
desensitize
.
core
.
slider
.
annotation
;
import
cn.iocoder.yudao.framework.desensitize.core.base.annotation.DesensitizeBy
;
import
cn.iocoder.yudao.framework.desensitize.core.slider.handler.BankCardDesensitization
;
import
com.fasterxml.jackson.annotation.JacksonAnnotationsInside
;
import
java.lang.annotation.Documented
;
import
java.lang.annotation.ElementType
;
import
java.lang.annotation.Retention
;
import
java.lang.annotation.RetentionPolicy
;
import
java.lang.annotation.Target
;
/**
* 银行卡号
*
* @author gaibu
*/
@Documented
@Target
({
ElementType
.
FIELD
})
@Retention
(
RetentionPolicy
.
RUNTIME
)
@JacksonAnnotationsInside
@DesensitizeBy
(
handler
=
BankCardDesensitization
.
class
)
public
@interface
BankCardDesensitize
{
/**
* 前缀保留长度
*/
int
prefixKeep
()
default
6
;
/**
* 后缀保留长度
*/
int
suffixKeep
()
default
2
;
/**
* 替换规则,银行卡号;比如:9988002866797031脱敏之后为998800********31
*/
String
replacer
()
default
"*"
;
}
yudao-framework/yudao-spring-boot-starter-desensitize/src/main/java/cn/iocoder/yudao/framework/desensitize/core/slider/annotation/CarLicenseDesensitize.java
0 → 100644
浏览文件 @
fb577ca7
package
cn
.
iocoder
.
yudao
.
framework
.
desensitize
.
core
.
slider
.
annotation
;
import
cn.iocoder.yudao.framework.desensitize.core.base.annotation.DesensitizeBy
;
import
cn.iocoder.yudao.framework.desensitize.core.slider.handler.CarLicenseDesensitization
;
import
com.fasterxml.jackson.annotation.JacksonAnnotationsInside
;
import
java.lang.annotation.Documented
;
import
java.lang.annotation.ElementType
;
import
java.lang.annotation.Retention
;
import
java.lang.annotation.RetentionPolicy
;
import
java.lang.annotation.Target
;
/**
* 车牌号
*
* @author gaibu
*/
@Documented
@Target
({
ElementType
.
FIELD
})
@Retention
(
RetentionPolicy
.
RUNTIME
)
@JacksonAnnotationsInside
@DesensitizeBy
(
handler
=
CarLicenseDesensitization
.
class
)
public
@interface
CarLicenseDesensitize
{
/**
* 前缀保留长度
*/
int
prefixKeep
()
default
3
;
/**
* 后缀保留长度
*/
int
suffixKeep
()
default
1
;
/**
* 替换规则,车牌号;比如:粤A66666脱敏之后为粤A6***6
*/
String
replacer
()
default
"*"
;
}
yudao-framework/yudao-spring-boot-starter-desensitize/src/main/java/cn/iocoder/yudao/framework/desensitize/core/slider/annotation/ChineseNameDesensitize.java
0 → 100644
浏览文件 @
fb577ca7
package
cn
.
iocoder
.
yudao
.
framework
.
desensitize
.
core
.
slider
.
annotation
;
import
cn.iocoder.yudao.framework.desensitize.core.base.annotation.DesensitizeBy
;
import
cn.iocoder.yudao.framework.desensitize.core.slider.handler.ChineseNameDesensitization
;
import
com.fasterxml.jackson.annotation.JacksonAnnotationsInside
;
import
java.lang.annotation.Documented
;
import
java.lang.annotation.ElementType
;
import
java.lang.annotation.Retention
;
import
java.lang.annotation.RetentionPolicy
;
import
java.lang.annotation.Target
;
/**
* 中文名
*
* @author gaibu
*/
@Documented
@Target
({
ElementType
.
FIELD
})
@Retention
(
RetentionPolicy
.
RUNTIME
)
@JacksonAnnotationsInside
@DesensitizeBy
(
handler
=
ChineseNameDesensitization
.
class
)
public
@interface
ChineseNameDesensitize
{
/**
* 前缀保留长度
*/
int
prefixKeep
()
default
1
;
/**
* 后缀保留长度
*/
int
suffixKeep
()
default
0
;
/**
* 替换规则,中文名;比如:刘子豪脱敏之后为刘**
*/
String
replacer
()
default
"*"
;
}
yudao-framework/yudao-spring-boot-starter-desensitize/src/main/java/cn/iocoder/yudao/framework/desensitize/core/slider/annotation/FixedPhoneDesensitize.java
0 → 100644
浏览文件 @
fb577ca7
package
cn
.
iocoder
.
yudao
.
framework
.
desensitize
.
core
.
slider
.
annotation
;
import
cn.iocoder.yudao.framework.desensitize.core.base.annotation.DesensitizeBy
;
import
cn.iocoder.yudao.framework.desensitize.core.slider.handler.FixedPhoneDesensitization
;
import
com.fasterxml.jackson.annotation.JacksonAnnotationsInside
;
import
java.lang.annotation.Documented
;
import
java.lang.annotation.ElementType
;
import
java.lang.annotation.Retention
;
import
java.lang.annotation.RetentionPolicy
;
import
java.lang.annotation.Target
;
/**
* 固定电话
*
* @author gaibu
*/
@Documented
@Target
({
ElementType
.
FIELD
})
@Retention
(
RetentionPolicy
.
RUNTIME
)
@JacksonAnnotationsInside
@DesensitizeBy
(
handler
=
FixedPhoneDesensitization
.
class
)
public
@interface
FixedPhoneDesensitize
{
/**
* 前缀保留长度
*/
int
prefixKeep
()
default
4
;
/**
* 后缀保留长度
*/
int
suffixKeep
()
default
2
;
/**
* 替换规则,固定电话;比如:01086551122脱敏之后为0108*****22
*/
String
replacer
()
default
"*"
;
}
yudao-framework/yudao-spring-boot-starter-desensitize/src/main/java/cn/iocoder/yudao/framework/desensitize/core/slider/annotation/IdCardDesensitize.java
0 → 100644
浏览文件 @
fb577ca7
package
cn
.
iocoder
.
yudao
.
framework
.
desensitize
.
core
.
slider
.
annotation
;
import
cn.iocoder.yudao.framework.desensitize.core.base.annotation.DesensitizeBy
;
import
cn.iocoder.yudao.framework.desensitize.core.slider.handler.IdCardDesensitization
;
import
com.fasterxml.jackson.annotation.JacksonAnnotationsInside
;
import
java.lang.annotation.Documented
;
import
java.lang.annotation.ElementType
;
import
java.lang.annotation.Retention
;
import
java.lang.annotation.RetentionPolicy
;
import
java.lang.annotation.Target
;
/**
* 身份证
*
* @author gaibu
*/
@Documented
@Target
({
ElementType
.
FIELD
})
@Retention
(
RetentionPolicy
.
RUNTIME
)
@JacksonAnnotationsInside
@DesensitizeBy
(
handler
=
IdCardDesensitization
.
class
)
public
@interface
IdCardDesensitize
{
/**
* 前缀保留长度
*/
int
prefixKeep
()
default
6
;
/**
* 后缀保留长度
*/
int
suffixKeep
()
default
2
;
/**
* 替换规则,身份证号码;比如:530321199204074611脱敏之后为530321**********11
*/
String
replacer
()
default
"*"
;
}
yudao-framework/yudao-spring-boot-starter-desensitize/src/main/java/cn/iocoder/yudao/framework/desensitize/core/slider/annotation/MobileDesensitize.java
0 → 100644
浏览文件 @
fb577ca7
package
cn
.
iocoder
.
yudao
.
framework
.
desensitize
.
core
.
slider
.
annotation
;
import
cn.iocoder.yudao.framework.desensitize.core.base.annotation.DesensitizeBy
;
import
cn.iocoder.yudao.framework.desensitize.core.slider.handler.MobileDesensitization
;
import
com.fasterxml.jackson.annotation.JacksonAnnotationsInside
;
import
java.lang.annotation.Documented
;
import
java.lang.annotation.ElementType
;
import
java.lang.annotation.Retention
;
import
java.lang.annotation.RetentionPolicy
;
import
java.lang.annotation.Target
;
/**
* 手机号
*
* @author gaibu
*/
@Documented
@Target
({
ElementType
.
FIELD
})
@Retention
(
RetentionPolicy
.
RUNTIME
)
@JacksonAnnotationsInside
@DesensitizeBy
(
handler
=
MobileDesensitization
.
class
)
public
@interface
MobileDesensitize
{
/**
* 前缀保留长度
*/
int
prefixKeep
()
default
3
;
/**
* 后缀保留长度
*/
int
suffixKeep
()
default
4
;
/**
* 替换规则,手机号;比如:13248765917脱敏之后为132****5917
*/
String
replacer
()
default
"*"
;
}
yudao-framework/yudao-spring-boot-starter-desensitize/src/main/java/cn/iocoder/yudao/framework/desensitize/core/slider/annotation/PasswordDesensitize.java
0 → 100644
浏览文件 @
fb577ca7
package
cn
.
iocoder
.
yudao
.
framework
.
desensitize
.
core
.
slider
.
annotation
;
import
cn.iocoder.yudao.framework.desensitize.core.base.annotation.DesensitizeBy
;
import
cn.iocoder.yudao.framework.desensitize.core.slider.handler.PasswordDesensitization
;
import
com.fasterxml.jackson.annotation.JacksonAnnotationsInside
;
import
java.lang.annotation.Documented
;
import
java.lang.annotation.ElementType
;
import
java.lang.annotation.Retention
;
import
java.lang.annotation.RetentionPolicy
;
import
java.lang.annotation.Target
;
/**
* 密码
*
* @author gaibu
*/
@Documented
@Target
({
ElementType
.
FIELD
})
@Retention
(
RetentionPolicy
.
RUNTIME
)
@JacksonAnnotationsInside
@DesensitizeBy
(
handler
=
PasswordDesensitization
.
class
)
public
@interface
PasswordDesensitize
{
/**
* 前缀保留长度
*/
int
prefixKeep
()
default
0
;
/**
* 后缀保留长度
*/
int
suffixKeep
()
default
0
;
/**
* 替换规则,密码;
*
* 比如:123456脱敏之后为******
*/
String
replacer
()
default
"*"
;
}
yudao-framework/yudao-spring-boot-starter-desensitize/src/main/java/cn/iocoder/yudao/framework/desensitize/core/slider/annotation/SliderDesensitize.java
0 → 100644
浏览文件 @
fb577ca7
package
cn
.
iocoder
.
yudao
.
framework
.
desensitize
.
core
.
slider
.
annotation
;
import
cn.iocoder.yudao.framework.desensitize.core.base.annotation.DesensitizeBy
;
import
cn.iocoder.yudao.framework.desensitize.core.slider.handler.DefaultDesensitizationHandler
;
import
com.fasterxml.jackson.annotation.JacksonAnnotationsInside
;
import
java.lang.annotation.Documented
;
import
java.lang.annotation.ElementType
;
import
java.lang.annotation.Retention
;
import
java.lang.annotation.RetentionPolicy
;
import
java.lang.annotation.Target
;
/**
* 滑动脱敏注解
*
* @author gaibu
*/
@Documented
@Target
({
ElementType
.
FIELD
,
ElementType
.
ANNOTATION_TYPE
})
@Retention
(
RetentionPolicy
.
RUNTIME
)
@JacksonAnnotationsInside
@DesensitizeBy
(
handler
=
DefaultDesensitizationHandler
.
class
)
public
@interface
SliderDesensitize
{
/**
* 后缀保留长度
*/
int
suffixKeep
()
default
0
;
/**
* 替换规则,会将前缀后缀保留后,全部替换成 replacer
* 例如:prefixKeep = 1; suffixKeep = 2; replacer = "*";
* 原始字符串 123456
* 脱敏后 1***56
*/
String
replacer
()
default
"*"
;
/**
* 前缀保留长度
*/
int
prefixKeep
()
default
0
;
}
yudao-framework/yudao-spring-boot-starter-desensitize/src/main/java/cn/iocoder/yudao/framework/desensitize/core/slider/handler/AbstractDesensitizationHandler.java
0 → 100644
浏览文件 @
fb577ca7
package
cn
.
iocoder
.
yudao
.
framework
.
desensitize
.
core
.
slider
.
handler
;
import
cn.iocoder.yudao.framework.desensitize.core.base.handler.DesensitizationHandler
;
import
java.lang.annotation.Annotation
;
/**
* 滑动脱敏处理器抽象类,已实现通用的方法
*
* @author gaibu
*/
public
abstract
class
AbstractDesensitizationHandler
<
T
extends
Annotation
>
implements
DesensitizationHandler
<
T
>
{
@Override
public
String
desensitize
(
String
origin
,
T
annotation
)
{
int
prefixKeep
=
getPrefixKeep
(
annotation
);
int
suffixKeep
=
getSuffixKeep
(
annotation
);
String
replacer
=
getReplacer
(
annotation
);
int
length
=
origin
.
length
();
// 情况一:原始字符串长度小于等于保留长度,则原始字符串全部替换
if
(
prefixKeep
>=
length
||
suffixKeep
>=
length
)
{
return
buildReplacerByLength
(
replacer
,
length
);
}
// 情况二:原始字符串长度小于等于前后缀保留字符串长度,则原始字符串全部替换
if
((
prefixKeep
+
suffixKeep
)
>=
length
)
{
return
buildReplacerByLength
(
replacer
,
length
);
}
// 情况三:原始字符串长度大于前后缀保留字符串长度,则替换中间字符串
int
interval
=
length
-
prefixKeep
-
suffixKeep
;
return
origin
.
substring
(
0
,
prefixKeep
)
+
buildReplacerByLength
(
replacer
,
interval
)
+
origin
.
substring
(
prefixKeep
+
interval
);
}
/**
* 根据长度循环构建替换符
*
* @param replacer 替换符
* @param length 长度
* @return 构建后的替换符
*/
private
String
buildReplacerByLength
(
String
replacer
,
int
length
)
{
StringBuilder
builder
=
new
StringBuilder
();
for
(
int
i
=
0
;
i
<
length
;
i
++)
{
builder
.
append
(
replacer
);
}
return
builder
.
toString
();
}
/**
* 前缀保留长度
*
* @param annotation 注解信息
* @return 前缀保留长度
*/
abstract
Integer
getPrefixKeep
(
T
annotation
);
/**
* 后缀保留长度
*
* @param annotation 注解信息
* @return 后缀保留长度
*/
abstract
Integer
getSuffixKeep
(
T
annotation
);
/**
* 替换符
*
* @param annotation 注解信息
* @return 替换符
*/
abstract
String
getReplacer
(
T
annotation
);
}
yudao-framework/yudao-spring-boot-starter-desensitize/src/main/java/cn/iocoder/yudao/framework/desensitize/core/slider/handler/BankCardDesensitization.java
0 → 100644
浏览文件 @
fb577ca7
package
cn
.
iocoder
.
yudao
.
framework
.
desensitize
.
core
.
slider
.
handler
;
import
cn.iocoder.yudao.framework.desensitize.core.slider.annotation.BankCardDesensitize
;
/**
* {@link BankCardDesensitize} 的脱敏处理器
*
* @author gaibu
*/
public
class
BankCardDesensitization
extends
AbstractDesensitizationHandler
<
BankCardDesensitize
>
{
@Override
Integer
getPrefixKeep
(
BankCardDesensitize
annotation
)
{
return
annotation
.
prefixKeep
();
}
@Override
Integer
getSuffixKeep
(
BankCardDesensitize
annotation
)
{
return
annotation
.
suffixKeep
();
}
@Override
String
getReplacer
(
BankCardDesensitize
annotation
)
{
return
annotation
.
replacer
();
}
}
yudao-framework/yudao-spring-boot-starter-desensitize/src/main/java/cn/iocoder/yudao/framework/desensitize/core/slider/handler/CarLicenseDesensitization.java
0 → 100644
浏览文件 @
fb577ca7
package
cn
.
iocoder
.
yudao
.
framework
.
desensitize
.
core
.
slider
.
handler
;
import
cn.iocoder.yudao.framework.desensitize.core.slider.annotation.CarLicenseDesensitize
;
/**
* {@link CarLicenseDesensitize} 的脱敏处理器
*
* @author gaibu
*/
public
class
CarLicenseDesensitization
extends
AbstractDesensitizationHandler
<
CarLicenseDesensitize
>
{
@Override
Integer
getPrefixKeep
(
CarLicenseDesensitize
annotation
)
{
return
annotation
.
prefixKeep
();
}
@Override
Integer
getSuffixKeep
(
CarLicenseDesensitize
annotation
)
{
return
annotation
.
suffixKeep
();
}
@Override
String
getReplacer
(
CarLicenseDesensitize
annotation
)
{
return
annotation
.
replacer
();
}
}
yudao-framework/yudao-spring-boot-starter-desensitize/src/main/java/cn/iocoder/yudao/framework/desensitize/core/slider/handler/ChineseNameDesensitization.java
0 → 100644
浏览文件 @
fb577ca7
package
cn
.
iocoder
.
yudao
.
framework
.
desensitize
.
core
.
slider
.
handler
;
import
cn.iocoder.yudao.framework.desensitize.core.slider.annotation.ChineseNameDesensitize
;
/**
* {@link ChineseNameDesensitize} 的脱敏处理器
*
* @author gaibu
*/
public
class
ChineseNameDesensitization
extends
AbstractDesensitizationHandler
<
ChineseNameDesensitize
>
{
@Override
Integer
getPrefixKeep
(
ChineseNameDesensitize
annotation
)
{
return
annotation
.
prefixKeep
();
}
@Override
Integer
getSuffixKeep
(
ChineseNameDesensitize
annotation
)
{
return
annotation
.
suffixKeep
();
}
@Override
String
getReplacer
(
ChineseNameDesensitize
annotation
)
{
return
annotation
.
replacer
();
}
}
yudao-framework/yudao-spring-boot-starter-desensitize/src/main/java/cn/iocoder/yudao/framework/desensitize/core/slider/handler/DefaultDesensitizationHandler.java
0 → 100644
浏览文件 @
fb577ca7
package
cn
.
iocoder
.
yudao
.
framework
.
desensitize
.
core
.
slider
.
handler
;
import
cn.iocoder.yudao.framework.desensitize.core.slider.annotation.SliderDesensitize
;
/**
* {@link SliderDesensitize} 的脱敏处理器
*
* @author gaibu
*/
public
class
DefaultDesensitizationHandler
extends
AbstractDesensitizationHandler
<
SliderDesensitize
>
{
@Override
Integer
getPrefixKeep
(
SliderDesensitize
annotation
)
{
return
annotation
.
prefixKeep
();
}
@Override
Integer
getSuffixKeep
(
SliderDesensitize
annotation
)
{
return
annotation
.
suffixKeep
();
}
@Override
String
getReplacer
(
SliderDesensitize
annotation
)
{
return
annotation
.
replacer
();
}
}
yudao-framework/yudao-spring-boot-starter-desensitize/src/main/java/cn/iocoder/yudao/framework/desensitize/core/slider/handler/FixedPhoneDesensitization.java
0 → 100644
浏览文件 @
fb577ca7
package
cn
.
iocoder
.
yudao
.
framework
.
desensitize
.
core
.
slider
.
handler
;
import
cn.iocoder.yudao.framework.desensitize.core.slider.annotation.FixedPhoneDesensitize
;
/**
* {@link FixedPhoneDesensitize} 的脱敏处理器
*
* @author gaibu
*/
public
class
FixedPhoneDesensitization
extends
AbstractDesensitizationHandler
<
FixedPhoneDesensitize
>
{
@Override
Integer
getPrefixKeep
(
FixedPhoneDesensitize
annotation
)
{
return
annotation
.
prefixKeep
();
}
@Override
Integer
getSuffixKeep
(
FixedPhoneDesensitize
annotation
)
{
return
annotation
.
suffixKeep
();
}
@Override
String
getReplacer
(
FixedPhoneDesensitize
annotation
)
{
return
annotation
.
replacer
();
}
}
yudao-framework/yudao-spring-boot-starter-desensitize/src/main/java/cn/iocoder/yudao/framework/desensitize/core/slider/handler/IdCardDesensitization.java
0 → 100644
浏览文件 @
fb577ca7
package
cn
.
iocoder
.
yudao
.
framework
.
desensitize
.
core
.
slider
.
handler
;
import
cn.iocoder.yudao.framework.desensitize.core.slider.annotation.IdCardDesensitize
;
/**
* {@link IdCardDesensitize} 的脱敏处理器
*
* @author gaibu
*/
public
class
IdCardDesensitization
extends
AbstractDesensitizationHandler
<
IdCardDesensitize
>
{
@Override
Integer
getPrefixKeep
(
IdCardDesensitize
annotation
)
{
return
annotation
.
prefixKeep
();
}
@Override
Integer
getSuffixKeep
(
IdCardDesensitize
annotation
)
{
return
annotation
.
suffixKeep
();
}
@Override
String
getReplacer
(
IdCardDesensitize
annotation
)
{
return
annotation
.
replacer
();
}
}
yudao-framework/yudao-spring-boot-starter-desensitize/src/main/java/cn/iocoder/yudao/framework/desensitize/core/slider/handler/MobileDesensitization.java
0 → 100644
浏览文件 @
fb577ca7
package
cn
.
iocoder
.
yudao
.
framework
.
desensitize
.
core
.
slider
.
handler
;
import
cn.iocoder.yudao.framework.desensitize.core.slider.annotation.MobileDesensitize
;
/**
* {@link MobileDesensitize} 的脱敏处理器
*
* @author gaibu
*/
public
class
MobileDesensitization
extends
AbstractDesensitizationHandler
<
MobileDesensitize
>
{
@Override
Integer
getPrefixKeep
(
MobileDesensitize
annotation
)
{
return
annotation
.
prefixKeep
();
}
@Override
Integer
getSuffixKeep
(
MobileDesensitize
annotation
)
{
return
annotation
.
suffixKeep
();
}
@Override
String
getReplacer
(
MobileDesensitize
annotation
)
{
return
annotation
.
replacer
();
}
}
yudao-framework/yudao-spring-boot-starter-desensitize/src/main/java/cn/iocoder/yudao/framework/desensitize/core/slider/handler/PasswordDesensitization.java
0 → 100644
浏览文件 @
fb577ca7
package
cn
.
iocoder
.
yudao
.
framework
.
desensitize
.
core
.
slider
.
handler
;
import
cn.iocoder.yudao.framework.desensitize.core.slider.annotation.PasswordDesensitize
;
/**
* {@link PasswordDesensitize} 的码脱敏处理器
*
* @author gaibu
*/
public
class
PasswordDesensitization
extends
AbstractDesensitizationHandler
<
PasswordDesensitize
>
{
@Override
Integer
getPrefixKeep
(
PasswordDesensitize
annotation
)
{
return
annotation
.
prefixKeep
();
}
@Override
Integer
getSuffixKeep
(
PasswordDesensitize
annotation
)
{
return
annotation
.
suffixKeep
();
}
@Override
String
getReplacer
(
PasswordDesensitize
annotation
)
{
return
annotation
.
replacer
();
}
}
yudao-framework/yudao-spring-boot-starter-desensitize/src/test/java/cn/iocoder/yudao/framework/desensitize/core/DesensitizeTest.java
0 → 100644
浏览文件 @
fb577ca7
package
cn
.
iocoder
.
yudao
.
framework
.
desensitize
.
core
;
import
cn.iocoder.yudao.framework.common.util.json.JsonUtils
;
import
cn.iocoder.yudao.framework.desensitize.core.regex.annotation.EmailDesensitize
;
import
cn.iocoder.yudao.framework.desensitize.core.regex.annotation.RegexDesensitize
;
import
cn.iocoder.yudao.framework.desensitize.core.annotation.Address
;
import
cn.iocoder.yudao.framework.desensitize.core.slider.annotation.BankCardDesensitize
;
import
cn.iocoder.yudao.framework.desensitize.core.slider.annotation.CarLicenseDesensitize
;
import
cn.iocoder.yudao.framework.desensitize.core.slider.annotation.ChineseNameDesensitize
;
import
cn.iocoder.yudao.framework.desensitize.core.slider.annotation.FixedPhoneDesensitize
;
import
cn.iocoder.yudao.framework.desensitize.core.slider.annotation.IdCardDesensitize
;
import
cn.iocoder.yudao.framework.desensitize.core.slider.annotation.PasswordDesensitize
;
import
cn.iocoder.yudao.framework.desensitize.core.slider.annotation.MobileDesensitize
;
import
cn.iocoder.yudao.framework.desensitize.core.slider.annotation.SliderDesensitize
;
import
lombok.Data
;
import
org.junit.jupiter.api.Test
;
import
static
org
.
junit
.
jupiter
.
api
.
Assertions
.*;
/**
* {@link DesensitizeTest} 的单元测试
*/
public
class
DesensitizeTest
{
@Test
public
void
test
()
{
// 准备参数
DesensitizeDemo
desensitizeDemo
=
new
DesensitizeDemo
();
desensitizeDemo
.
setNickname
(
"芋道源码"
);
desensitizeDemo
.
setBankCard
(
"9988002866797031"
);
desensitizeDemo
.
setCarLicense
(
"粤A66666"
);
desensitizeDemo
.
setFixedPhone
(
"01086551122"
);
desensitizeDemo
.
setIdCard
(
"530321199204074611"
);
desensitizeDemo
.
setPassword
(
"123456"
);
desensitizeDemo
.
setPhoneNumber
(
"13248765917"
);
desensitizeDemo
.
setSlider1
(
"ABCDEFG"
);
desensitizeDemo
.
setSlider2
(
"ABCDEFG"
);
desensitizeDemo
.
setSlider3
(
"ABCDEFG"
);
desensitizeDemo
.
setEmail
(
"1@email.com"
);
desensitizeDemo
.
setRegex
(
"你好,我是芋道源码"
);
desensitizeDemo
.
setAddress
(
"北京市海淀区上地十街10号"
);
desensitizeDemo
.
setOrigin
(
"芋道源码"
);
// 调用
DesensitizeDemo
d
=
JsonUtils
.
parseObject
(
JsonUtils
.
toJsonString
(
desensitizeDemo
),
DesensitizeDemo
.
class
);
// 断言
assertNotNull
(
d
);
assertEquals
(
"芋***"
,
d
.
getNickname
());
assertEquals
(
"998800********31"
,
d
.
getBankCard
());
assertEquals
(
"粤A6***6"
,
d
.
getCarLicense
());
assertEquals
(
"0108*****22"
,
d
.
getFixedPhone
());
assertEquals
(
"530321**********11"
,
d
.
getIdCard
());
assertEquals
(
"******"
,
d
.
getPassword
());
assertEquals
(
"132****5917"
,
d
.
getPhoneNumber
());
assertEquals
(
"#######"
,
d
.
getSlider1
());
assertEquals
(
"ABC*EFG"
,
d
.
getSlider2
());
assertEquals
(
"*******"
,
d
.
getSlider3
());
assertEquals
(
"1****@email.com"
,
d
.
getEmail
());
assertEquals
(
"你好,我是*"
,
d
.
getRegex
());
assertEquals
(
"北京市海淀区上地十街10号*"
,
d
.
getAddress
());
assertEquals
(
"芋道源码"
,
d
.
getOrigin
());
}
@Data
public
static
class
DesensitizeDemo
{
@ChineseNameDesensitize
private
String
nickname
;
@BankCardDesensitize
private
String
bankCard
;
@CarLicenseDesensitize
private
String
carLicense
;
@FixedPhoneDesensitize
private
String
fixedPhone
;
@IdCardDesensitize
private
String
idCard
;
@PasswordDesensitize
private
String
password
;
@MobileDesensitize
private
String
phoneNumber
;
@SliderDesensitize
(
prefixKeep
=
6
,
suffixKeep
=
1
,
replacer
=
"#"
)
private
String
slider1
;
@SliderDesensitize
(
prefixKeep
=
3
,
suffixKeep
=
3
)
private
String
slider2
;
@SliderDesensitize
(
prefixKeep
=
10
)
private
String
slider3
;
@EmailDesensitize
private
String
email
;
@RegexDesensitize
(
regex
=
"芋道源码"
,
replacer
=
"*"
)
private
String
regex
;
@Address
private
String
address
;
private
String
origin
;
}
}
yudao-framework/yudao-spring-boot-starter-desensitize/src/test/java/cn/iocoder/yudao/framework/desensitize/core/annotation/Address.java
0 → 100644
浏览文件 @
fb577ca7
package
cn
.
iocoder
.
yudao
.
framework
.
desensitize
.
core
.
annotation
;
import
cn.iocoder.yudao.framework.desensitize.core.DesensitizeTest
;
import
cn.iocoder.yudao.framework.desensitize.core.base.annotation.DesensitizeBy
;
import
cn.iocoder.yudao.framework.desensitize.core.handler.AddressHandler
;
import
com.fasterxml.jackson.annotation.JacksonAnnotationsInside
;
import
java.lang.annotation.Documented
;
import
java.lang.annotation.ElementType
;
import
java.lang.annotation.Retention
;
import
java.lang.annotation.RetentionPolicy
;
import
java.lang.annotation.Target
;
/**
* 地址
*
* 用于 {@link DesensitizeTest} 测试使用
*
* @author gaibu
*/
@Documented
@Target
({
ElementType
.
FIELD
})
@Retention
(
RetentionPolicy
.
RUNTIME
)
@JacksonAnnotationsInside
@DesensitizeBy
(
handler
=
AddressHandler
.
class
)
public
@interface
Address
{
String
replacer
()
default
"*"
;
}
yudao-framework/yudao-spring-boot-starter-desensitize/src/test/java/cn/iocoder/yudao/framework/desensitize/core/handler/AddressHandler.java
0 → 100644
浏览文件 @
fb577ca7
package
cn
.
iocoder
.
yudao
.
framework
.
desensitize
.
core
.
handler
;
import
cn.iocoder.yudao.framework.desensitize.core.DesensitizeTest
;
import
cn.iocoder.yudao.framework.desensitize.core.base.handler.DesensitizationHandler
;
import
cn.iocoder.yudao.framework.desensitize.core.annotation.Address
;
/**
* {@link Address} 的脱敏处理器
*
* 用于 {@link DesensitizeTest} 测试使用
*/
public
class
AddressHandler
implements
DesensitizationHandler
<
Address
>
{
@Override
public
String
desensitize
(
String
origin
,
Address
annotation
)
{
return
origin
+
annotation
.
replacer
();
}
}
yudao-framework/yudao-spring-boot-starter-web/src/main/java/cn/iocoder/yudao/framework/swagger/core/SpringFoxHandlerProviderBeanPostProcessor.java
浏览文件 @
fb577ca7
...
@@ -5,7 +5,6 @@ import cn.iocoder.yudao.framework.common.util.collection.CollectionUtils;
...
@@ -5,7 +5,6 @@ import cn.iocoder.yudao.framework.common.util.collection.CollectionUtils;
import
org.springframework.beans.BeansException
;
import
org.springframework.beans.BeansException
;
import
org.springframework.beans.factory.config.BeanPostProcessor
;
import
org.springframework.beans.factory.config.BeanPostProcessor
;
import
org.springframework.web.servlet.mvc.method.RequestMappingInfoHandlerMapping
;
import
org.springframework.web.servlet.mvc.method.RequestMappingInfoHandlerMapping
;
import
springfox.documentation.spring.web.plugins.WebFluxRequestHandlerProvider
;
import
springfox.documentation.spring.web.plugins.WebMvcRequestHandlerProvider
;
import
springfox.documentation.spring.web.plugins.WebMvcRequestHandlerProvider
;
import
java.util.List
;
import
java.util.List
;
...
@@ -20,7 +19,7 @@ public class SpringFoxHandlerProviderBeanPostProcessor implements BeanPostProces
...
@@ -20,7 +19,7 @@ public class SpringFoxHandlerProviderBeanPostProcessor implements BeanPostProces
@Override
@Override
public
Object
postProcessAfterInitialization
(
Object
bean
,
String
beanName
)
throws
BeansException
{
public
Object
postProcessAfterInitialization
(
Object
bean
,
String
beanName
)
throws
BeansException
{
if
(
bean
instanceof
WebMvcRequestHandlerProvider
||
bean
instanceof
WebFluxRequestHandlerProvider
)
{
if
(
bean
instanceof
WebMvcRequestHandlerProvider
)
{
customizeSpringfoxHandlerMappings
(
getHandlerMappings
(
bean
));
customizeSpringfoxHandlerMappings
(
getHandlerMappings
(
bean
));
}
}
return
bean
;
return
bean
;
...
...
yudao-framework/yudao-spring-boot-starter-web/src/main/java/cn/iocoder/yudao/framework/web/config/YudaoWebAutoConfiguration.java
浏览文件 @
fb577ca7
...
@@ -145,9 +145,10 @@ public class YudaoWebAutoConfiguration implements WebMvcConfigurer {
...
@@ -145,9 +145,10 @@ public class YudaoWebAutoConfiguration implements WebMvcConfigurer {
@Bean
@Bean
@ConditionalOnMissingBean
(
name
=
"xssJacksonCustomizer"
)
@ConditionalOnMissingBean
(
name
=
"xssJacksonCustomizer"
)
@ConditionalOnBean
(
ObjectMapper
.
class
)
@ConditionalOnBean
(
ObjectMapper
.
class
)
public
Jackson2ObjectMapperBuilderCustomizer
xssJacksonCustomizer
(
XssCleaner
xssCleaner
,
XssProperties
xssProperties
)
{
@ConditionalOnProperty
(
value
=
"yudao.xss.enable"
,
havingValue
=
"true"
)
public
Jackson2ObjectMapperBuilderCustomizer
xssJacksonCustomizer
(
XssCleaner
xssCleaner
)
{
// 在反序列化时进行 xss 过滤,可以替换使用 XssStringJsonSerializer,在序列化时进行处理
// 在反序列化时进行 xss 过滤,可以替换使用 XssStringJsonSerializer,在序列化时进行处理
return
builder
->
builder
.
deserializerByType
(
String
.
class
,
new
XssStringJsonDeserializer
(
xssCleaner
,
xssProperties
));
return
builder
->
builder
.
deserializerByType
(
String
.
class
,
new
XssStringJsonDeserializer
(
xssCleaner
));
}
}
...
...
yudao-framework/yudao-spring-boot-starter-web/src/main/java/cn/iocoder/yudao/framework/web/core/handler/GlobalExceptionHandler.java
浏览文件 @
fb577ca7
...
@@ -13,7 +13,6 @@ import cn.iocoder.yudao.framework.common.util.json.JsonUtils;
...
@@ -13,7 +13,6 @@ import cn.iocoder.yudao.framework.common.util.json.JsonUtils;
import
cn.iocoder.yudao.framework.common.util.servlet.ServletUtils
;
import
cn.iocoder.yudao.framework.common.util.servlet.ServletUtils
;
import
lombok.AllArgsConstructor
;
import
lombok.AllArgsConstructor
;
import
lombok.extern.slf4j.Slf4j
;
import
lombok.extern.slf4j.Slf4j
;
import
org.apache.commons.lang3.exception.ExceptionUtils
;
import
org.springframework.security.access.AccessDeniedException
;
import
org.springframework.security.access.AccessDeniedException
;
import
org.springframework.util.Assert
;
import
org.springframework.util.Assert
;
import
org.springframework.validation.BindException
;
import
org.springframework.validation.BindException
;
...
@@ -31,7 +30,6 @@ import javax.validation.ConstraintViolation;
...
@@ -31,7 +30,6 @@ import javax.validation.ConstraintViolation;
import
javax.validation.ConstraintViolationException
;
import
javax.validation.ConstraintViolationException
;
import
javax.validation.ValidationException
;
import
javax.validation.ValidationException
;
import
java.time.LocalDateTime
;
import
java.time.LocalDateTime
;
import
java.time.LocalDateTime
;
import
java.util.Map
;
import
java.util.Map
;
import
static
cn
.
iocoder
.
yudao
.
framework
.
common
.
exception
.
enums
.
GlobalErrorCodeConstants
.*;
import
static
cn
.
iocoder
.
yudao
.
framework
.
common
.
exception
.
enums
.
GlobalErrorCodeConstants
.*;
...
@@ -249,7 +247,7 @@ public class GlobalExceptionHandler {
...
@@ -249,7 +247,7 @@ public class GlobalExceptionHandler {
errorLog
.
setExceptionName
(
e
.
getClass
().
getName
());
errorLog
.
setExceptionName
(
e
.
getClass
().
getName
());
errorLog
.
setExceptionMessage
(
ExceptionUtil
.
getMessage
(
e
));
errorLog
.
setExceptionMessage
(
ExceptionUtil
.
getMessage
(
e
));
errorLog
.
setExceptionRootCauseMessage
(
ExceptionUtil
.
getRootCauseMessage
(
e
));
errorLog
.
setExceptionRootCauseMessage
(
ExceptionUtil
.
getRootCauseMessage
(
e
));
errorLog
.
setExceptionStackTrace
(
ExceptionUtil
s
.
getStackTrace
(
e
));
errorLog
.
setExceptionStackTrace
(
ExceptionUtil
.
stacktraceToString
(
e
));
StackTraceElement
[]
stackTraceElements
=
e
.
getStackTrace
();
StackTraceElement
[]
stackTraceElements
=
e
.
getStackTrace
();
Assert
.
notEmpty
(
stackTraceElements
,
"异常 stackTraceElements 不能为空"
);
Assert
.
notEmpty
(
stackTraceElements
,
"异常 stackTraceElements 不能为空"
);
StackTraceElement
stackTraceElement
=
stackTraceElements
[
0
];
StackTraceElement
stackTraceElement
=
stackTraceElements
[
0
];
...
...
编写
预览
Markdown
格式
0%
重试
或
添加新文件
添加附件
取消
您添加了
0
人
到此讨论。请谨慎行事。
请先完成此评论的编辑!
取消
请
注册
或者
登录
后发表评论