原创 DataPolice支持一个验证对象在多场景下的多种验证方式

2.2.0版本以后支持一个验证对象在多场景下的多种验证方式

准备工作,引入DataPolice

<dependency>
    <groupId>com.laysonx</groupId>
    <artifactId>data-police</artifactId>
    <version>2.2.0</version>
</dependency>

第一步:开启数据验证
1、scanHelperPackages 值为 @DataPoliceHelper标识的 VerifyHandler、DataHandler 所在包路径(建议所有Handler子类放在一个路径下)
2、pointcut 值与 AspectJ 中的 @Pointcut() 方式相同

// 方式一:注解开启(所有版本均支持)
@SpringBootApplication
/** 开启数据验证 */
@EnableDataPolice(
        scanHelperPackages = "com.laysonx.demo.handler",
        pointcut = "execution(* com..*.api..*.*(..)) || execution(* com..*.service..*.*(..))"
        )
public class DemoApplication {
    public static void main(String[] args) {
        SpringApplication.run(DemoApplication.class, args);
    }
}
// 方式二:JavaConfig 开启(v2.0.0+(含))
@Configuration
public class DataPoliceConfig {
    @Bean
    public DataPoliceConfigurer configurer(){
        DataPoliceConfigurer configurer = new DataPoliceConfigurer();
        configurer.setPointcut("execution(* com..*.api..*.*(..)) || execution(* com..*.service..*.*(..))");
        configurer.setScanHelperPackages(new String[]{"com.laysonx.demo.handler"});
        return configurer;
    }
}
<!-- 方式三:xml 开启(v2.0.0+(含))-->
<bean id="dataPoliceConfigurer" class="com.laysonx.data.police.core.DataPoliceConfigurer">
    <property name="pointcut" value="execution(* com..*.api..*.*(..)) || execution(* com..*.service..*.*(..))  "/>
    <property name="scanHelperPackages" value="com.laysonx.demo.handler"/>
</bean>

第二步:在相关HTTP接口上使用 @EnableDataVerify 注解,配置验证入口以及验证的数据对象
1、 value 值为要验证的对象
2、errorMessage 值为数据检查不匹配时抛出异常的具体信息(可不填写)
3、tag 标记:用于同一个对象多种处理方式时,默认:DEFAULT

@RestController
public class DemoController {

    @Autowired
    private DemoService demoService;

    @GetMapping("demo")
    @EnableDataVerify(value = {Demo.class}, errorMessage = "无权查看",tag = "MyTag")
    public Demo getById() {
        return demoService.getById();
    }

}

第三步: 自定义Handler使用,继承AbstractVerifyHandler类,重新以下三个方法,配置自定义数据验证规则
1、getTargetClass() 返回 验证的对象
2、verify() 自定义验证对象的验证规则
3、getTag() 当前验证target对应的tag标签,默认:DEFAULT(注意:与@ EnableDataVerify 上的tag保持一致)

public class MyVerifyHandler extends AbstractVerifyHandler {

    @Override
    public Class<?> getTargetClass() {
        return Material.class;
    }

    @Override
    public <T> boolean verify(T t) {

        if(t instanceof Material){
            Material m = (Material) t;
            if(m.getId() > 100){
                return true;
            }
        }

        return false;
    }

    <!-- 可以省略 默认DEFAULT-->
    @Override
    public String getTag() {
        return "MyTag";
    }
}
本文为 Laysonx 原创 文章,转载无需和我联系,但请注明来自 李鑫的杂货铺 或 李鑫博客