diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/core/service/SensitiveService.java b/ruoyi-common/src/main/java/com/ruoyi/common/core/service/SensitiveService.java new file mode 100644 index 000000000..7b27bb45c --- /dev/null +++ b/ruoyi-common/src/main/java/com/ruoyi/common/core/service/SensitiveService.java @@ -0,0 +1,18 @@ +package com.ruoyi.common.core.service; + +/** + * 脱敏服务 + * 默认管理员不过滤 + * 需自行根据业务重写实现 + * + * @author Lion Li + * @version 3.6.0 + */ +public interface SensitiveService { + + /** + * 是否脱敏 + */ + boolean isSensitive(); + +} diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/jackson/SensitiveJsonSerializer.java b/ruoyi-common/src/main/java/com/ruoyi/common/jackson/SensitiveJsonSerializer.java index 2b4fef4f1..39038ab99 100644 --- a/ruoyi-common/src/main/java/com/ruoyi/common/jackson/SensitiveJsonSerializer.java +++ b/ruoyi-common/src/main/java/com/ruoyi/common/jackson/SensitiveJsonSerializer.java @@ -7,8 +7,9 @@ import com.fasterxml.jackson.databind.JsonSerializer; import com.fasterxml.jackson.databind.SerializerProvider; import com.fasterxml.jackson.databind.ser.ContextualSerializer; import com.ruoyi.common.annotation.Sensitive; +import com.ruoyi.common.core.service.SensitiveService; import com.ruoyi.common.enums.SensitiveStrategy; -import com.ruoyi.common.utils.SecurityUtils; +import com.ruoyi.common.utils.spring.SpringUtils; import java.io.IOException; import java.util.Objects; @@ -23,7 +24,8 @@ public class SensitiveJsonSerializer extends JsonSerializer implements C @Override public void serialize(String value, JsonGenerator gen, SerializerProvider serializers) throws IOException { - if (SecurityUtils.isAdmin(SecurityUtils.getLoginUser().getUserId()) || SecurityUtils.getLoginUser().getMenuPermissions().contains("Sensitive")){ + SensitiveService sensitiveService = SpringUtils.getBean(SensitiveService.class); + if (sensitiveService.isSensitive()){ gen.writeString(value); } else { gen.writeString(strategy.desensitizer().apply(value)); diff --git a/ruoyi-demo/src/main/java/com/ruoyi/demo/controller/TestSensitiveController.java b/ruoyi-demo/src/main/java/com/ruoyi/demo/controller/TestSensitiveController.java index 30708cd45..24587477b 100644 --- a/ruoyi-demo/src/main/java/com/ruoyi/demo/controller/TestSensitiveController.java +++ b/ruoyi-demo/src/main/java/com/ruoyi/demo/controller/TestSensitiveController.java @@ -1,63 +1,38 @@ package com.ruoyi.demo.controller; -import cn.hutool.core.bean.BeanUtil; -import com.ruoyi.common.annotation.Log; -import com.ruoyi.common.annotation.RepeatSubmit; +import com.ruoyi.common.annotation.Sensitive; import com.ruoyi.common.core.controller.BaseController; import com.ruoyi.common.core.domain.AjaxResult; -import com.ruoyi.common.core.domain.PageQuery; -import com.ruoyi.common.core.page.TableDataInfo; -import com.ruoyi.common.core.validate.AddGroup; -import com.ruoyi.common.core.validate.EditGroup; -import com.ruoyi.common.core.validate.QueryGroup; -import com.ruoyi.common.enums.BusinessType; -import com.ruoyi.common.excel.ExcelResult; -import com.ruoyi.common.utils.ValidatorUtils; -import com.ruoyi.common.utils.poi.ExcelUtil; -import com.ruoyi.demo.domain.TestDemo; -import com.ruoyi.demo.domain.TestSensitive; -import com.ruoyi.demo.domain.bo.TestDemoBo; -import com.ruoyi.demo.domain.bo.TestDemoImportVo; -import com.ruoyi.demo.domain.vo.TestDemoVo; -import com.ruoyi.demo.service.ITestDemoService; -import io.swagger.annotations.*; -import lombok.RequiredArgsConstructor; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.security.access.prepost.PreAuthorize; -import org.springframework.validation.annotation.Validated; -import org.springframework.web.bind.annotation.*; -import org.springframework.web.multipart.MultipartFile; - -import javax.servlet.http.HttpServletResponse; -import javax.validation.constraints.NotEmpty; -import javax.validation.constraints.NotNull; -import java.util.Arrays; -import java.util.List; -import java.util.concurrent.TimeUnit; +import com.ruoyi.common.enums.SensitiveStrategy; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import lombok.Data; +import lombok.experimental.Accessors; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; /** - * 测试单表Controller + * 测试数据脱敏控制器 * + * 默认管理员不过滤 + * 需自行根据业务重写实现 + * + * @see com.ruoyi.common.core.service.SensitiveService * @author Lion Li - * @date 2021-07-26 + * @version 3.6.0 */ -@Validated @Api(value = "测试数据脱敏控制器", tags = {"测试数据脱敏管理"}) -@RequiredArgsConstructor(onConstructor_ = @Autowired) @RestController @RequestMapping("/demo/sensitive") public class TestSensitiveController extends BaseController { - //默认为admin用户及拥有Sensitive权限字符用户不做脱敏 - //1.配置菜单加入权限字符为Sensitive的按钮 - //2.配置需要免除数据脱敏的角色加入Sensitive权限 - //3.实体类上加上数据脱敏注解 /** * 测试数据脱敏 */ @ApiOperation("查询测试单表列表") - @GetMapping() - public AjaxResult get() { + @GetMapping("/test") + public AjaxResult test() { TestSensitive testSensitive = new TestSensitive() .setIdCard("3333199910101212") .setPhone("18888888888") @@ -65,4 +40,28 @@ public class TestSensitiveController extends BaseController { return AjaxResult.success(testSensitive); } + @Data + @Accessors(chain = true) + static class TestSensitive { + + /** + * 身份证 + */ + @Sensitive(strategy = SensitiveStrategy.ID_CARD) + private String idCard; + + /** + * 电话 + */ + @Sensitive(strategy = SensitiveStrategy.PHONE) + private String phone; + + /** + * 地址 + */ + @Sensitive(strategy = SensitiveStrategy.ADDRESS) + private String address; + + } + } diff --git a/ruoyi-demo/src/main/java/com/ruoyi/demo/domain/TestSensitive.java b/ruoyi-demo/src/main/java/com/ruoyi/demo/domain/TestSensitive.java deleted file mode 100644 index 1fbf6b377..000000000 --- a/ruoyi-demo/src/main/java/com/ruoyi/demo/domain/TestSensitive.java +++ /dev/null @@ -1,35 +0,0 @@ -package com.ruoyi.demo.domain; - -import com.baomidou.mybatisplus.annotation.*; -import com.ruoyi.common.annotation.Sensitive; -import com.ruoyi.common.core.domain.BaseEntity; -import com.ruoyi.common.enums.SensitiveStrategy; -import lombok.Data; -import lombok.EqualsAndHashCode; -import lombok.experimental.Accessors; - -/** - * 测试单表对象 test_demo - * - * @author Lion Li - * @date 2021-07-26 - */ -@Data -@EqualsAndHashCode(callSuper = true) -@Accessors(chain = true) -public class TestSensitive extends BaseEntity { - - private static final long serialVersionUID=1L; - - /** 身份证 */ - @Sensitive(strategy = SensitiveStrategy.ID_CARD) - private String idCard; - - /** 电话 */ - @Sensitive(strategy = SensitiveStrategy.PHONE) - private String phone; - - /** 地址 */ - @Sensitive(strategy = SensitiveStrategy.ADDRESS) - private String address; -} diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysSensitiveServiceImpl.java b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysSensitiveServiceImpl.java new file mode 100644 index 000000000..242befb0e --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysSensitiveServiceImpl.java @@ -0,0 +1,26 @@ +package com.ruoyi.system.service.impl; + +import com.ruoyi.common.core.service.SensitiveService; +import com.ruoyi.common.utils.SecurityUtils; +import org.springframework.stereotype.Service; + +/** + * 脱敏服务 + * 默认管理员不过滤 + * 需自行根据业务重写实现 + * + * @author Lion Li + * @version 3.6.0 + */ +@Service +public class SysSensitiveServiceImpl implements SensitiveService { + + /** + * 是否脱敏 + */ + @Override + public boolean isSensitive() { + return SecurityUtils.isAdmin(SecurityUtils.getUserId()); + } + +}