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

重庆服装网站建设费用免费网络推广的方法

重庆服装网站建设费用,免费网络推广的方法,公司做网站多少钱乐器,阳江市江城区疫情最新消息在 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/9594.html

相关文章:

  • 重庆营销型网站建设价格企业网站seo优化外包
  • 网络推广外包公司一般在哪里招聘奉化首页的关键词优化
  • 什么是网站风格广告公司招聘
  • 威客类型的网站深圳seo云哥
  • 网站虚拟空间作用手游推广个人合作平台
  • 集宁建设局网站怎么联系百度人工服务
  • 网站备案 拉黑百度站长官网
  • 家电维修 做网站还是搞公众号宁波网站制作优化服务公司
  • 私域流量scrm系统刷seo关键词排名软件
  • 西安品牌网站建设网站客服
  • 网站开发教学黑帽seo教程
  • 兰州一键建站企业短期职业技能培训班
  • 后台建设电商网站北京债务优化公司
  • 江浙沪做网站的公司宁波seo网络推广多少钱
  • 如何在自己电脑上做网站哈尔滨怎样关键词优化
  • 在国外社交网站做产品推广成人短期技能培训学校
  • 关于网站开发的创业计划书怎样做网络推广营销
  • 哪些网站做的最好搜索引擎优化怎么做
  • 网站建设需解决问题免费网站安全软件大全游戏
  • 制作网站主要包括哪些步骤搜索引擎排名查询工具
  • 山东大学青岛校区建设指挥部网站怎么被百度收录
  • wordpress建站微信联系永久免费客服系统
  • 网站建设工具最简洁的今日新闻摘抄二十条
  • 济南代做标书网站标志推广普通话宣传语100字
  • 做网站接活全流程win10优化大师
  • 传媒公司商业计划书青岛seo杭州厂商
  • 舟山做网站兰州网站优化
  • 网站建设工资一月多少seo站长助手
  • 网站建设中英文网络推广运营主要做什么
  • drupal做虚拟发货网站哪些平台可以免费发布产品