当前位置: 首页 > wzjs >正文

建立个网站seo推广优化培训

建立个网站,seo推广优化培训,广东新病毒最新消息,semir是什么牌子在 Spring Boot 结合 MyBatis 的项目中,实现字段脱敏(如手机号、身份证号、银行卡号等敏感信息的部分隐藏)可以通过以下方案实现。以下是分步说明和完整代码示例: 一、实现方案选择 1. 方案一:自定义注解 Jackson 序…

在 Spring Boot 结合 MyBatis 的项目中,实现字段脱敏(如手机号、身份证号、银行卡号等敏感信息的部分隐藏)可以通过以下方案实现。以下是分步说明和完整代码示例:


一、实现方案选择

1. 方案一:自定义注解 + Jackson 序列化脱敏
  • 适用场景:数据返回给前端时动态脱敏,数据库存储原始数据。
  • 优点:无侵入性,通过注解灵活控制脱敏字段,与业务逻辑解耦。
  • 核心实现:利用 Jackson 的 JsonSerializer 自定义序列化逻辑。
2. 方案二:MyBatis 类型处理器(TypeHandler)
  • 适用场景:数据库存储时加密或脱敏,查询时解密。
  • 优点:数据存储层直接处理,安全性高。
  • 缺点:需处理加解密逻辑,可能影响查询性能。
3. 方案三:AOP 拦截 Service 层返回结果
  • 适用场景:在业务层统一处理敏感字段。
  • 优点:集中控制脱敏逻辑。
  • 缺点:需遍历对象树,性能开销较大。

二、推荐方案一:Jackson 动态脱敏(完整代码)

1. 定义脱敏策略注解
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.FIELD)
public @interface Sensitive {/*** 脱敏策略类型*/SensitiveStrategy strategy();
}
2. 定义脱敏策略枚举
public enum SensitiveStrategy {/*** 手机号脱敏(保留前3后4位)*/PHONE(s -> s.replaceAll("(\\d{3})\\d{4}(\\d{4})", "$1****$2")),/*** 身份证脱敏(保留前1后4位)*/ID_CARD(s -> s.replaceAll("(\\d{1})\\d{13}(\\d{4})", "$1*************$2")),/*** 银行卡脱敏(保留前6后4位)*/BANK_CARD(s -> s.replaceAll("(\\d{6})\\d{9}(\\d{4})", "$1*********$2"));private final Function<String, String> desensitizer;SensitiveStrategy(Function<String, String> desensitizer) {this.desensitizer = desensitizer;}public Function<String, String> getDesensitizer() {return desensitizer;}
}
3. 自定义 Jackson 序列化器
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 java.io.IOException;public class SensitiveSerializer extends JsonSerializer<String> implements ContextualSerializer {private SensitiveStrategy strategy;@Overridepublic void serialize(String value, JsonGenerator gen, SerializerProvider provider) throws IOException {if (strategy != null && value != null) {// 应用脱敏策略String desensitizedValue = strategy.getDesensitizer().apply(value);gen.writeString(desensitizedValue);} else {gen.writeString(value);}}@Overridepublic JsonSerializer<?> createContextual(SerializerProvider prov, BeanProperty property) {Sensitive annotation = property.getAnnotation(Sensitive.class);if (annotation != null && property.getType().getRawClass() == String.class) {SensitiveSerializer serializer = new SensitiveSerializer();serializer.strategy = annotation.strategy();return serializer;}return prov.findNullValueSerializer(property);}
}
4. 在实体类中标记脱敏字段
public class User {private String name;@Sensitive(strategy = SensitiveStrategy.PHONE)private String phone;@Sensitive(strategy = SensitiveStrategy.ID_CARD)private String idCard;// Getters and Setters
}
5. 注册自定义序列化器到 Jackson
import com.fasterxml.jackson.databind.module.SimpleModule;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;@Configuration
public class JacksonConfig {@Beanpublic SimpleModule sensitiveModule() {SimpleModule module = new SimpleModule();module.addSerializer(String.class, new SensitiveSerializer());return module;}
}

三、测试结果

请求返回示例
{"name": "张三","phone": "138****5678","idCard": "3***************1234"
}

四、方案二补充:MyBatis TypeHandler 脱敏(数据库存储加密)

1. 实现 TypeHandler
@MappedTypes(String.class)
@MappedJdbcTypes(JdbcType.VARCHAR)
public class EncryptTypeHandler implements TypeHandler<String> {private static final String KEY = "your-secret-key-123";@Overridepublic void setParameter(PreparedStatement ps, int i, String parameter, JdbcType jdbcType) throws SQLException {// 存储时加密ps.setString(i, encrypt(parameter));}@Overridepublic String getResult(ResultSet rs, String columnName) throws SQLException {// 查询时解密return decrypt(rs.getString(columnName));}private String encrypt(String data) {// 实现加密逻辑(如 AES)return "encrypted_" + data;}private String decrypt(String data) {// 实现解密逻辑return data.replace("encrypted_", "");}
}
2. 在字段上指定 TypeHandler
public class User {@TableField(typeHandler = EncryptTypeHandler.class)private String bankCard;
}

五、方案选择建议

方案适用场景优点缺点
Jackson 动态脱敏响应数据脱敏无侵入性,灵活配置不适用于非 JSON 输出场景
MyBatis TypeHandler数据库加密存储数据存储安全加解密影响查询性能
AOP 拦截业务层统一处理集中控制逻辑性能开销较大

六、扩展优化

  1. 动态开关脱敏
    通过 @Sensitive 注解增加 enable 属性,结合配置中心动态控制是否脱敏:

    @Sensitive(strategy = SensitiveStrategy.PHONE, enable = "${sensitive.enable:true}")
    
  2. 嵌套对象脱敏
    自定义序列化器支持嵌套对象处理:

    public class User {@Sensitive(strategy = SensitiveStrategy.PHONE)private String phone;@Valid // 支持嵌套对象private Address address;
    }
    
  3. 日志脱敏
    结合 Logback 或 Log4j2 的 Converter 实现日志输出时的脱敏。


通过上述方案,可以灵活、安全地实现敏感字段的脱敏处理,根据实际需求选择合适的实现方式。

http://www.dtcms.com/wzjs/230468.html

相关文章:

  • 大连网站制作多少钱2023全民核酸又开始了
  • 做自己的网站花多钱优化seo教程技术
  • 内蒙古网站建设百度自媒体平台
  • 怎么更改wordpress的后台路径江东怎样优化seo
  • 做亚马逊需要的图片外链网站seo项目分析
  • wordpress 导购站模板人民日报今天新闻
  • 做网站图片不够大创建个人网站的流程
  • 常用的网站类型有哪些类型有哪些类型有哪些网站黄页推广软件
  • 如何建立起个人网站北京网站seo
  • 网站建设和应用的情况怎么建立企业网站
  • 龙华营销型网站中国十大互联网公司
  • 网站建设的基本过程郑州竞价托管
  • 阜阳市建设局网站爱站网站
  • 仿牌网站建设世界足球排名
  • 网站建设部署视频教程seo门户 site
  • 湖北做网站找谁seo搜索优化培训
  • 网站制作公司挣钱吗网站推广的四个阶段
  • 沈阳做网站建设怎么联系百度人工客服
  • 经营性质网站备案宁德seo
  • 企业网站的常见服务焊工培训内容有哪些
  • 想找各大新闻网站投稿怎么做专业seo网络推广
  • 做物流网站电话号码太原seo排名
  • 贺兰网站建设双11销量数据
  • 武汉做网站优化多少钱神马关键词快速排名软件
  • 凡科的网站做seo比较难seo发贴软件
  • 修改网站图片石家庄百度seo排名
  • 做双语网站多少钱seo网络优化公司
  • 哈尔滨精致网站建设电脑优化软件哪个好用
  • 网站记录登录账号怎么做网站排名首页
  • 电商网站开发工作室收录优美图片崩了