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

Shardingsphere-jdbc 自定义脱敏规则

 添加邮件脱敏规则:

// 123123123@qq.com,将@前4个字符脱敏
12312****@qq.com

代码重写MaskAlgorithm相关方法: 

/*
 * Licensed to the Apache Software Foundation (ASF) under one or more
 * contributor license agreements.  See the NOTICE file distributed with
 * this work for additional information regarding copyright ownership.
 * The ASF licenses this file to You under the Apache License, Version 2.0
 * (the "License"); you may not use this file except in compliance with
 * the License.  You may obtain a copy of the License at
 *
 *     http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

import com.google.common.base.Strings;
import org.apache.shardingsphere.mask.algorithm.MaskAlgorithmPropertiesChecker;
import org.apache.shardingsphere.mask.spi.MaskAlgorithm;

import java.util.Properties;

/**
 * Mask after special-chars algorithm.
 */
public final class MaskBeforeSpecialNCharsAlgorithm implements MaskAlgorithm<Object, String> {
    
    private static final String SPECIAL_CHARS = "special-chars";
    
    private static final String REPLACE_CHAR = "replace-char";

    private static final String FIRST_N = "first-n";
    
    private String specialChars;
    
    private Character replaceChar;

    private Integer firstN;
    
    @Override
    public void init(final Properties props) {
        specialChars = createSpecialChars(props);
        replaceChar = createReplaceChar(props);
        firstN = createFirstN(props);
    }

    private Integer createFirstN(final Properties props) {
        MaskAlgorithmPropertiesChecker.checkPositiveInteger(props, FIRST_N, this);
        return Integer.parseInt(props.getProperty(FIRST_N));
    }
    
    private String createSpecialChars(final Properties props) {
        MaskAlgorithmPropertiesChecker.checkAtLeastOneChar(props, SPECIAL_CHARS, this);
        return props.getProperty(SPECIAL_CHARS);
    }
    
    private Character createReplaceChar(final Properties props) {
        MaskAlgorithmPropertiesChecker.checkSingleChar(props, REPLACE_CHAR, this);
        return props.getProperty(REPLACE_CHAR).charAt(0);
    }
    
    @Override
    public String mask(final Object plainValue) {
        String result = null == plainValue ? null : String.valueOf(plainValue);
        if (Strings.isNullOrEmpty(result)) {
            return result;
        }
        int index = result.contains(specialChars) ? result.indexOf(specialChars) : -1;
        char[] chars = result.toCharArray();
        for (int i = index-firstN; i < index; i++) {
            chars[i] = replaceChar;
        }
        return new String(chars);
    }
    
    @Override
    public String getType() {
        return "MASK_BEFORE_SPECIAL_N_CHARS";
    }
}

 pom: 依赖版本5.5.0

        <!-- 相关依赖 -->
        <dependency>
            <groupId>org.apache.shardingsphere</groupId>
            <artifactId>shardingsphere-jdbc</artifactId>
        </dependency>
        <dependency>
            <groupId>org.yaml</groupId>
            <artifactId>snakeyaml</artifactId>
        </dependency>
       <dependency>
            <groupId>org.apache.shardingsphere</groupId>
            <artifactId>shardingsphere-infra-common</artifactId>
        </dependency>
        <dependency>
            <groupId>io.swagger</groupId>
            <artifactId>swagger-annotations</artifactId>
            <version>${swaggerannotations.version}</version>
        </dependency>
        <dependency>
            <groupId>org.apache.shardingsphere</groupId>
            <artifactId>shardingsphere-mask-api</artifactId>
        </dependency>
        <dependency>
            <groupId>org.apache.shardingsphere</groupId>
            <artifactId>shardingsphere-mask-core</artifactId>
        </dependency>

项目中添加如下配置: 

org.apache.shardingsphere.mask.spi.MaskAlgorithm文件中增加脱敏类: 

com.xx.xxx.plugin.MaskBeforeSpecialNCharsAlgorithm

 yml中如下配置:

rules:
    - !MASK
        tables:
            ac_user:
                columns:
                    password:
                        maskAlgorithm: md5_mask
                    email:
                        maskAlgorithm: mask_before_special_n_chars_mask
                    phone_number:
                        maskAlgorithm: keep_first_n_last_m_mask

        maskAlgorithms:
            md5_mask:
                type: MD5
            mask_before_special_n_chars_mask:
                type: MASK_BEFORE_SPECIAL_N_CHARS
                props:
                    special-chars: '@'
                    replace-char: '*'
                    first-n: 4

相关文章:

  • 分割回文串 (leetcode 131
  • 视频孪生与三维视频融合:重构工业现场的“数字视网膜“
  • 002-告别乱码-libiconv-C++开源库108杰
  • 2025年特种设备作业人员叉车司机考试练习题
  • 【网络协议详解】——BGP/MPLS IP VPN技术(学习笔记)
  • macOS 安装配置 iTerm2 记录
  • 亚远景-企业如何通过ASPICE评估:汽车软件开发的实践指南
  • 小程序SSL证书过期怎么办?
  • python之replace,strip,split命令
  • ai agent开发实例
  • Mysql 的 Query Cache为什么被废弃
  • 设计一个优秀 API 的秘诀
  • HAMSTER: HIERARCHICAL ACTION MODELS FOR OPEN-WORLD ROBOT MANIPULATION
  • 2.4 基于Vitest的单元测试基础设施搭建
  • AutoGen学习笔记系列(十)Advanced - Swarm
  • 大湾区经济网报道:全国已有103个统筹地区实施医保基金即时结算
  • Ubuntu 22.04 安装配置 FTP服务器 教程
  • Vue3的基本使用
  • Nginx 服务器,Apache 服务器,IIS 服务器的区别
  • 【测试语言基础篇】Python基础之List列表
  • 国产做愛视频网站/充电宝seo关键词优化
  • 有网站后台模板如何做数据库/seo课程培训班
  • 莱芜 做网站 公司/网销是什么工作好做吗
  • 企业网站建设服务内容/如何提高百度关键词排名
  • 网站建设安全级别/郑州网络推广报价
  • 政府网站建设的重大意义/兰州seo实战优化