四时宝库

程序员的知识宝库

你知道mybaits-plus的快速脱敏设置吗?这样做起来很简单

在程序员设计开发程序的过程中,经常遇到对于数据敏感的信息,而这些敏感信息又不希望被别人看到,就需要程序对数据进行脱敏处理,mybatis-plus为我们提供了简单快速的脱敏设置。如下配置

配置类:

@Configuration
public class SensitiveStrategyConfig {

    /**
     * 注入脱敏策略
     */
    @Bean
    public ISensitiveStrategy sensitiveStrategy() {
        // 自定义 testStrategy 类型脱敏处理
        return new SensitiveStrategy().addStrategy("testStrategy", t -> t + "***test***");
    }
}

实体类:

@Getter
@Setter
public class User {
    private Long id;
    /**
     * 这里是一个自定义的策略 {@link SensitiveStrategyConfig} 初始化注入
     */
    @FieldSensitive("testStrategy")
    private String username;
    /**
     * 默认支持策略 {@link SensitiveType }
     */
    @FieldSensitive(SensitiveType.mobile)
    private String mobile;
    @FieldSensitive(SensitiveType.email)
    private String email;

}

控制类:

@RestController
public class UserController {
    @Autowired
    private UserMapper userMapper;
    @Autowired
    private ISensitiveStrategy sensitiveStrategy;

    // 测试访问 http://localhost:8080/info
    @GetMapping("/info")
    public User info() {
        return userMapper.selectById(1L);
    }

    // 测试返回 map 访问 http://localhost:8080/map
    @GetMapping("/map")
    public Map<String, Object> map() {
        // 测试嵌套对象脱敏
        Map<String, Object> userMap = new HashMap<>();
        userMap.put("user", userMapper.selectById(1L));
        userMap.put("test", 123);
        userMap.put("userMap", new HashMap<String, Object>() {{
            put("user2", userMapper.selectById(2L));
            put("test2", "hi china");
        }});
        // 手动调用策略脱敏
        userMap.put("mobile", sensitiveStrategy.getStrategyFunctionMap()
                .get(SensitiveType.mobile).apply("15315388888"));
        return userMap;
    }

    // 测试访问 http://localhost:8080/list
    // 全部不脱敏 http://localhost:8080/list?skip=1
    // 指定属性不脱敏 http://localhost:8080/list?skip=2
    @GetMapping("/list")
    public List<User> list(HttpServletRequest request) {
        String skip = request.getParameter("skip");
        if (Objects.equals("1", skip)) {
            // 跳过脱密处理
            RequestDataTransfer.skipSensitive();
        } else if (null != skip) {
            // 忽略 username 及 email 属性
            RequestDataTransfer.skipSensitive();
        }
        return userMapper.selectList(null);
    }
}

启动类:

@SpringBootApplication
public class SensitiveJacksonApplication {

    // 测试访问 http://localhost:8080/info ,http://localhost:8080/list
    public static void main(String[] args) {
        SpringApplication.run(SensitiveJacksonApplication.class, args);
    }
}

需要源码的朋友,可以关注我,私聊发给你源码哦。

发表评论:

控制面板
您好,欢迎到访网站!
  查看权限
网站分类
最新留言
    友情链接