简单易用的参数校验腾讯分分彩源码出售和版本校验方式(java)

步骤是:配置数据校验腾讯分分彩源码出售QQ2952777280【话仙源码论坛】hxforum.com【木瓜源码论坛】papayabbs.com 规则(多条)>>>>在控制器上添加校验注解>>>>使用拦截器拦截校验参数(获取注解,初始化校验规则(第一次),取出参数)

我的项目中使用的MVC框架为Jfinal框架,其他框架也适用只需要将拦截器部分修改即可

使用方式非常简单,使用方式:

  1.  
    1.在controller层加上
  2.  
     
  3.  
     校验参数
  4.  
        //注册保存的校验组:VGroup.save
  5.  
        @Validator(bean=Register.class,group=VGroup.save)
  6.  
        //注册发送短信时校验组:VGroup.excutor
  7.  
        @Validator(bean=Register.class,group=VGroup.excutor)
  8.  
     
  9.  
     校验接口版本号
  10.  
        @Version(version=1,message="请升级到最新版本")
  11.  
     
  12.  
    2.配置拦截器:
  13.  
        @Override
  14.  
        public void onInterceptorConfig(Interceptors interceptors) {
  15.  
            interceptors.add(new ValidatorInterceptor());
  16.  
        }
  17.  
     
  18.  
    3.在不同的实体类上配置校验规则:
  19.  
        @VRules(rules={
  20.  
            @VRule(attrName = "mobilePhone", message="手机号码有误", groups = { VGroup.save,VGroup.excutor },  types = { VType.mobilePhone } ),
  21.  
            @VRule(attrName = "password", message="密码最少为6位字符",  groups = { VGroup.save },  types = { VType.password } ),
  22.  
            @VRule(attrName = "verifyCode", message="验证码有误",  groups = { VGroup.excutor },  types = { VType.number } ),
  23.  
            @VRule(attrName = "messageId", message="验证码标识有误",  groups = { VGroup.excutor },  types = { VType.notnull } )
  24.  
        })
  25.  
        public class Register implements Serializable{}

具体实现

  1.  
    /**
  2.  
     * ------------------------------
  3.  
     * 数据验证规则
  4.  
     * ------------------------------
  5.  
     * @author wdm([email protected])  @date 2018年5月30日
  6.  
     * @version 1.0
  7.  
     */
  8.  
    public interface IVRule {
  9.  
        /**
  10.  
         * 校验规则
  11.  
         */
  12.  
        public static final Map <String,List<ValidatorRule>> BEAN_VALIDATOT_RULE=new HashMap<String,List<ValidatorRule>>();
  13.  
        /**
  14.  
         * 是否初始化校验规则
  15.  
         */
  16.  
        public static final Map <String,Boolean> IS_INIT_VALIDATOT_RULE=new HashMap<String,Boolean>();
  17.  
    }
  18.  
    /** <pre>
  19.  
     * ------------------------------
  20.  
     * 用于controller层需要验证数据较多时的验证
  21.  
     * 默认VGroup=VGroup.excutor
  22.  
     * 默认VRenderType=VRenderType.json
  23.  
     * ------------------------------
  24.  
     *  </pre>
  25.  
     * @author wdm([email protected])  @date 2018年5月30日
  26.  
     * @version 1.0
  27.  
     */
  28.  
    @Documented
  29.  
    @Target(ElementType.METHOD)
  30.  
    @Inherited
  31.  
    @Retention(RetentionPolicy.RUNTIME)
  32.  
    public @interface Validator {
  33.  
        VGroup group() default VGroup.excutor;
  34.  
        Class <?> bean();
  35.  
        String beanName()  default "";
  36.  
        String uri()  default "";
  37.  
        VRenderType render()   default VRenderType.json;
  38.  
    }
  1.  
    /**
  2.  
     * ------------------------------
  3.  
     * 用于controller层验证版本号
  4.  
     * ------------------------------
  5.  
     * @author wdm([email protected])  @date 2018年5月30日
  6.  
     * @version 1.0
  7.  
     */
  8.  
    @Documented
  9.  
    @Target(ElementType.METHOD)
  10.  
    @Inherited
  11.  
    @Retention(RetentionPolicy.RUNTIME)
  12.  
    public @interface Version {
  13.  
        String message();
  14.  
        int version();
  15.  
    }
  1.  
    package com.www.mall.common.validator;
  2.  
     
  3.  
    public enum VRenderType {
  4.  
        json,redirect,render
  5.  
    }
  1.  
    /**
  2.  
     * ------------------------------
  3.  
     * 配置一条校验规则
  4.  
     * ------------------------------
  5.  
     * @author wdm([email protected])  @date 2018年7月31日
  6.  
     * @version 1.0
  7.  
     */
  8.  
    @Documented
  9.  
    @Target(ElementType.METHOD)
  10.  
    @Inherited
  11.  
    @Retention(RetentionPolicy.RUNTIME)
  12.  
    public @interface VRule {
  13.  
        VGroup[] groups() default {VGroup.excutor};
  14.  
        VType[] types();
  15.  
        String attrName();
  16.  
        String message() default "参数错误";
  17.  
    }
  1.  
    /**
  2.  
     * ------------------------------
  3.  
     * 校验规则
  4.  
     * ------------------------------
  5.  
     * @author wdm([email protected])  @date 2018年7月31日
  6.  
     * @version 1.0
  7.  
     */
  8.  
    @Documented
  9.  
    @Target(ElementType.TYPE)
  10.  
    @Inherited
  11.  
    @Retention(RetentionPolicy.RUNTIME)
  12.  
    public @interface VRules {
  13.  
        VRule[] rules();
  14.  
    }
  1.  
    /**
  2.  
     * ------------------------------
  3.  
     * 验证数据类型
  4.  
     * ------------------------------
  5.  
     * @author wdm([email protected])  @date 2018年5月30日
  6.  
     * @version 1.0
  7.  
     */
  8.  
    public enum VType {
  9.  
        /**非空验证**/
  10.  
        notnull,
  11.  
        /**非空时验证电子邮箱格式,空表示通过**/
  12.  
        ne_email,
  13.  
        /**非空时验证身份证格式,空表示通过**/    
  14.  
        ne_idcard,
  15.  
        
  16.  
        /**验证电子邮箱格式**/
  17.  
        email,
  18.  
        /**验证身份证格式**/    
  19.  
        idcard,
  20.  
        /**验证日期格式**/    
  21.  
        date,
  22.  
        /***手机号验证***/
  23.  
        mobilePhone,
  24.  
        /***密码验证***/
  25.  
        password,    
  26.  
        /***数字验证***/
  27.  
        number
  28.  
    }
  1.  
    /**
  2.  
     * ------------------------------
  3.  
     * 验证数据规则
  4.  
     * ------------------------------
  5.  
     * @author wdm([email protected])  @date 2018年5月30日
  6.  
     * @version 1.0
  7.  
     */
  8.  
    public class ValidatorRule {
  9.  
     
  10.  
        private List <VGroup> vGroups;
  11.  
        private List <VType> vTypes;
  12.  
        private String validatorField;
  13.  
        private String message;
  14.  
        
  15.  
        /**
  16.  
         * 构建一个数据验证规则
  17.  
         * @param validatorField
  18.  
         * @param message
  19.  
         * @param vGroups
  20.  
         * @param vTypes
  21.  
         * @return
  22.  
         */
  23.  
        public static ValidatorRule bulid(String validatorField,String message,List <VGroup> vGroups,List<VType> vTypes){
  24.  
            return new ValidatorRule(vGroups,vTypes,validatorField,message);
  25.  
        }
  26.  
        
  27.  
        /**
  28.  
         * 都需要验证的数据
  29.  
         * 如:save和update操作时都需要验证这个参数
  30.  
         * @param validatorGroups
  31.  
         * @return
  32.  
         */
  33.  
        public static List <VGroup> group(VGroup... validatorGroups){
  34.  
            List <VGroup> list=new ArrayList<VGroup>();
  35.  
            for (int i = 0; i  validatorGroups.length; i++) {
  36.  
                list.add(validatorGroups[i]);
  37.  
            }
  38.  
            return list;
  39.  
        }
  40.  
        
  41.  
        /**
  42.  
         * 数据的验证类型
  43.  
         * @param validatorTypes
  44.  
         * @return
  45.  
         */
  46.  
        public static List<VType> type(VType... validatorTypes){
  47.  
            List <VType> list=new ArrayList<VType>();
  48.  
            for (int i = 0; i  validatorTypes.length; i++) {
  49.  
                list.add(validatorTypes[i]);
  50.  
            }
  51.  
            return list;
  52.  
        }
  53.  
        
  54.  
        private ValidatorRule(){}
  55.  
        private ValidatorRule(List<VGroup> vGroups, List<VType> vTypes, String validatorField,
  56.  
                String message) {
  57.  
            super();
  58.  
            this.vGroups = vGroups;
  59.  
            this.vTypes = vTypes;
  60.  
            this.validatorField = validatorField;
  61.  
            this.message = message;
  62.  
        }
  63.  
     
  64.  
        public List <VGroup> getValidatorGroups() {
  65.  
            return vGroups;
  66.  
        }
  67.  
        public void setValidatorGroups(List <VGroup> vGroups) {
  68.  
            this.vGroups = vGroups;
  69.  
        }
  70.  
        public List <VType> getValidatorTypes() {
  71.  
            return vTypes;
  72.  
        }
  73.  
        public void setValidatorTypes(List <VType> vTypes) {
  74.  
            this.vTypes = vTypes;
  75.  
        }
  76.  
        public String getValidatorField() {
  77.  
            return validatorField;
  78.  
        }
  79.  
        public void setValidatorField(String validatorField) {
  80.  
            this.validatorField = validatorField;
  81.  
        }
  82.  
        public String getMessage() {
  83.  
            return message;
  84.  
        }
  85.  
        public void setMessage(String message) {
  86.  
            this.message = message;
  87.  
        }
  88.  
        
  89.  
    }

数据校验拦截器

  1.  
    /**
  2.  
     * ------------------------------
  3.  
     * 参数验证拦截器
  4.  
     * ------------------------------
  5.  
     * @author wdm([email protected])  @date 2018年5月31日
  6.  
     * @version 1.0
  7.  
     */
  8.  
    public class ValidatorInterceptor implements Interceptor {
  9.  
        
  10.  
        @Override
  11.  
        public void intercept(Invocation inv) {
  12.  
            Version version=inv.getMethod().getAnnotation(Version.class);
  13.  
            if(version!=null && !verifyVersion(inv, version)){
  14.  
                return;
  15.  
            }
  16.  
            
  17.  
            Validator validator = inv.getMethod().getAnnotation(Validator.class);
  18.  
            if (validator != null && !validate(inv, validator)) {
  19.  
                return;
  20.  
            }
  21.  
            inv.invoke();
  22.  
        }
  23.  
        
  24.  
        private boolean verifyVersion(Invocation inv, Version version) {
  25.  
            int vers=version.version();
  26.  
            String message=StringUtils.isBlank(version.message())?"该功能已升级,如要继续使用请升级app到最新版本":version.message();
  27.  
            Controller controller=inv.getController();
  28.  
            
  29.  
            if(vers>-1){
  30.  
                int verifyVersion = -1;
  31.  
                String versionStr= controller.getHeader("version");//验证版本号
  32.  
                if(versionStr!=null){
  33.  
                    try {
  34.  
                        verifyVersion=Integer.valueOf(versionStr);
  35.  
                    } catch (Exception e) {
  36.  
                        //版本信息错误  必须是int类型数字
  37.  
                        e.printStackTrace();
  38.  
                    }
  39.  
                }
  40.  
                
  41.  
                if(verifyVersion <vers){
  42.  
                    renderError( controller,VRenderType.json, "" ,RC.VERSION_FAIL,message);
  43.  
                    return false;
  44.  
                }
  45.  
                
  46.  
            }
  47.  
            return true;
  48.  
        }
  49.  
     
  50.  
        /**
  51.  
         * 验证JSON格式的数据
  52.  
         * @param inv
  53.  
         * @param validator
  54.  
         * @return
  55.  
         */
  56.  
        private boolean validate(Invocation inv, Validator validator) {
  57.  
            VRenderType vRenderType=validator.render();
  58.  
            VGroup group = validator.group();
  59.  
            Controller controller=inv.getController();
  60.  
            Class<?> clazz=validator.bean();
  61.  
            String validatorBeanName=clazz.getName();
  62.  
     
  63.  
            //初始化校验规则
  64.  
            initValidatorRule(validatorBeanName, clazz);
  65.  
            List <ValidatorRule>  list=IVRule.BEAN_VALIDATOT_RULE.get(validatorBeanName);
  66.  
            
  67.  
            if (list==null) {//没有验证规则
  68.  
                return true;
  69.  
            }
  70.  
            
  71.  
            JSONObject jsonObject= json(controller.getPara("param"),controller.getHeader("ploy"));
  72.  
            String beanName=validator.beanName()+".";
  73.  
            for (int i = 0; i  list.size(); i++) {//循环每一条数据规则
  74.  
                 ValidatorRule validatorRule=list.get(i);
  75.  
                 List<VGroup> groups = validatorRule.getValidatorGroups();
  76.  
                if(groups.contains(group)){//包含分组-需要验证该组数据
  77.  
                    String field=beanName+validatorRule.getValidatorField(); 
  78.  
                    String message=validatorRule.getMessage();
  79.  
                    List <VType> validatorRules=validatorRule.getValidatorTypes();
  80.  
                    for (int j = 0; j  validatorRules.size(); j++) {
  81.  
                        VType vType=validatorRules.get(j);
  82.  
                        
  83.  
                        String value =jsonObject==null ?null jsonObject.getString(field);//controller.getPara(field);
  84.  
                        
  85.  
                        if(!validate(vType,value)){
  86.  
                            renderError(controller,vRenderType, validator.uri(),RC.PARAM_FAIL,message);
  87.  
                            return false;
  88.  
                        }
  89.  
                    }
  90.  
                }
  91.  
            }
  92.  
            return true;
  93.  
        }
  94.  
        
  95.  
        /**
  96.  
         * 初始化验证规则
  97.  
         * @param isInit
  98.  
         * @param bean
  99.  
         */
  100.  
        private void initValidatorRule(String validatorBeanName,Class<?> clazz) {
  101.  
            Boolean isInit=IVRule.IS_INIT_VALIDATOT_RULE.get(validatorBeanName);
  102.  
            if(isInit!=null && isInit){//是否已经初始化
  103.  
                return;
  104.  
            }
  105.  
            VRules vRules=clazz.getAnnotation(VRules.class);
  106.  
            if(vRules!=null){
  107.  
                VRule[] rules=vRules.rules();
  108.  
                if(rules.length>0){
  109.  
                    List <ValidatorRule> validatorRules=new ArrayList<ValidatorRule>();
  110.  
                    for (int i = 0; i  rules.length; i++) {
  111.  
                        VRule vRule=rules[i];
  112.  
                        String attrName=vRule.attrName();
  113.  
                        String message=vRule.message();
  114.  
                        VGroup[]  validatorGroups=vRule.groups();
  115.  
                        VType[] validatorTypes=vRule.types();
  116.  
                        validatorRules.add(ValidatorRule.bulid( attrName, message,ValidatorRule.group(validatorGroups), ValidatorRule.type(validatorTypes)));
  117.  
                    }
  118.  
                    IVRule.BEAN_VALIDATOT_RULE.put(validatorBeanName, validatorRules);
  119.  
                }
  120.  
            }
  121.  
            IVRule.IS_INIT_VALIDATOT_RULE.put(validatorBeanName,true);
  122.  
        }
  123.  
     
  124.  
        protected JSONObject json(String json,String ploy){
  125.  
            if(Ploy.ENCRYPT.equals(ploy)){//参数解密
  126.  
                json=ParamUtil.decryptParam(json);
  127.  
                if(json==null){
  128.  
                    return null;
  129.  
                }
  130.  
            }
  131.  
            return JSON.parseObject(json);
  132.  
        }
  133.  
        
  134.  
        /**
  135.  
         * 有需要再追加
  136.  
         * @param vType
  137.  
         * @param value
  138.  
         * @return
  139.  
         */
  140.  
        private boolean validate(VType vType, String value) {
  141.  
            if(vType==VType.notnull){
  142.  
                return com.xiaoleilu.hutool.lang.Validator.isNotEmpty(value);
  143.  
            }else if(vType==VType.email){
  144.  
                return com.xiaoleilu.hutool.lang.Validator.isEmail(value);
  145.  
            }else if(vType==VType.idcard){
  146.  
                return IdcardUtil.isvalidCard18(value);
  147.  
            }else if(vType==VType.ne_email){
  148.  
                if( com.xiaoleilu.hutool.lang.Validator.isNotEmpty(value)){
  149.  
                    return true;
  150.  
                }
  151.  
                return RegexUtils.checkEmail(value);
  152.  
            }else if(vType==VType.ne_idcard){
  153.  
                if( com.xiaoleilu.hutool.lang.Validator.isNotEmpty(value)){
  154.  
                    return true;
  155.  
                }
  156.  
                return IdcardUtil.isvalidCard18(value);
  157.  
            }else if(vType==VType.mobilePhone){
  158.  
                return com.xiaoleilu.hutool.lang.Validator.isMobile(value) && value.length()==11;
  159.  
            }else if(vType==VType.password){
  160.  
                return value!=null && value.length()>5;
  161.  
            }else if(vType==VType.number){
  162.  
                return com.xiaoleilu.hutool.lang.Validator.isNumber(value);
  163.  
            }
  164.  
            
  165.  
            return true;
  166.  
        }
  167.  
     
  168.  
        private void renderError(Controller controller,VRenderType vRenderType, String redirect,RC result,String message) {
  169.  
            if (controller instanceof JbootController) {
  170.  
                if(vRenderType==VRenderType.json){
  171.  
                    controller.renderJson(Ret.paramFail(message));
  172.  
                }else if(vRenderType==VRenderType.redirect){
  173.  
                    if(StringUtils.isNotBlank(redirect)){
  174.  
                        controller.redirect(redirect);
  175.  
                    }
  176.  
    //                 ((JbootController) controller).setFlashAttr("message", message);
  177.  
    //                 ((JbootController) controller).setFlashAttr("result", result);
  178.  
                    controller.renderJson(Ret.result(result.getState(), message));
  179.  
                }else if(vRenderType==VRenderType.render){
  180.  
                    controller.keepPara();
  181.  
                    if(StringUtils.isNotBlank(redirect)){
  182.  
                        controller.render(redirect);
  183.  
                    }
  184.  
    //                 ((JbootController) controller).setFlashAttr("message", message);
  185.  
    //                 ((JbootController) controller).setFlashAttr("result", result);
  186.  
                    controller.renderJson(Ret.result(result.getState(), message));
  187.  
                }else{
  188.  
                    if(StringUtils.isNotBlank(redirect)){
  189.  
                        controller.redirect(redirect);
  190.  
                    }
  191.  
                    
  192.  
    //                 ((JbootController) controller).setFlashAttr("message", message);
  193.  
    //                 ((JbootController) controller).setFlashAttr("result", result);
  194.  
                    controller.renderJson(Ret.result(result.getState(), message));
  195.  
                }
  196.  
            }
  197.  
        }
  198.  
     
  199.  
    }

猜你喜欢

转载自www.cnblogs.com/kQQ2952777280/p/9429023.html
今日推荐