在程序员设计开发程序的过程中,经常遇到对于数据敏感的信息,而这些敏感信息又不希望被别人看到,就需要程序对数据进行脱敏处理,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);
}
}
需要源码的朋友,可以关注我,私聊发给你源码哦。