精华内容
下载资源
问答
  • 用户输入数据进行校验

    千次阅读 2019-11-13 10:01:05
    校验一般分为: jquery前端校验,ajax用户名重复校验,重要数据(后端校验(JSR303),唯一约束) 前端校验和ajax校验,有可能被饶过,所以对于重要的数据最好有后端校验,避免非法数据传入 本文详细讲解:后端...

    校验一般分为:

    jquery前端校验,ajax用户名重复校验,重要数据(后端校验(JSR303),唯一约束)

    前端校验和ajax校验,有可能被饶过,所以对于重要的数据最好有后端校验,避免非法数据传入

    本文详细讲解:后端校验(JSR303)

    一,支持JSR303校验
         支持JSR303的后端校验,需要导入Hibernate-Validator。其中JSR303数据校验支持:tomcat7及以上的服务器,其中  tomcat7以下的服务器:el表达式不是新标准。额外给服务器的lib包中替换新的标准的el

    在maven的项目中需要在pom.xml中添加

     

    二.在实体类中配置

    在实体类中标出校验规则以及提示信息。写入正则表达式,其中正常的  '\' 前,应该添加一个 '\'

    三.在Controller层

    注意方法所封装的对象引入了校验

    四.前端页面

    在前端加入了页面的反馈信息,即便用户绕过了前端的校验,也能通过后端校验返回的值,知道具体的非法信息

    展开全文
  • java安全编码指南之:输入校验

    万次阅读 2020-09-21 10:27:04
    为了保证java程序的安全,任何外部用户的输入我们都认为是可能有恶意攻击意图,我们需要所有的用户输入都进行一定程度的校验。 本文将带领大家探讨一下用户输入校验的一些场景。一起来看看吧。

    简介

    为了保证java程序的安全,任何外部用户的输入我们都认为是可能有恶意攻击意图,我们需要对所有的用户输入都进行一定程度的校验。

    本文将带领大家探讨一下用户输入校验的一些场景。一起来看看吧。

    在字符串标准化之后进行校验

    通常我们在进行字符串校验的时候需要对一些特殊字符进行过滤,过滤之后再进行字符串的校验。

    我们知道在java中字符是基于Unicode进行编码的。但是在Unicode中,同一个字符可能有不同的表示形式。所以我们需要对字符进行标准化。

    java中有一个专门的类Normalizer来负责处理,字符标准化的问题。

    我们看下面一个例子:

        public void testNormalizer(){
            System.out.println(Normalizer.normalize("\u00C1", Normalizer.Form.NFKC));
            System.out.println(Normalizer.normalize("\u0041\u0301", Normalizer.Form.NFKC));
        }
    

    输出结果:

    Á
    Á
    

    我们可以看到,虽然两者的Unicode不一样,但是最终表示的字符是一样的。所以我们在进行字符验证的时候,一定要先进行normalize处理。

    考虑下面的例子:

        public void falseNormalize(){
            String s = "\uFE64" + "script" + "\uFE65";
            Pattern pattern = Pattern.compile("[<>]"); // 检查是否有尖括号
            Matcher matcher = pattern.matcher(s);
            if (matcher.find()) {
                throw new IllegalStateException();
            }
            s = Normalizer.normalize(s, Normalizer.Form.NFKC);
        }
    

    其中\uFE64表示的是<,而\uFE65表示的是>,程序的本意是判断输入的字符串是否包含了尖括号,但是因为直接传入的是unicode字符,所以直接compile是检测不到的。

    我们需要对代码进行下面的改动:

        public void trueNormalize(){
            String s = "\uFE64" + "script" + "\uFE65";
            s = Normalizer.normalize(s, Normalizer.Form.NFKC);
            Pattern pattern = Pattern.compile("[<>]"); // 检查是否有尖括号
            Matcher matcher = pattern.matcher(s);
            if (matcher.find()) {
                throw new IllegalStateException();
            }
        }
    

    先进行normalize操作,然后再进行字符验证。

    注意不可信字符串的格式化

    我们经常会使用到格式化来对字符串进行格式化,在格式化的时候如果格式化字符串里面带有用户输入信息,那么我们就要注意了。

    看下面的例子:

        public void wrongFormat(){
            Calendar c = new GregorianCalendar(2020, GregorianCalendar.JULY, 27);
            String input=" %1$tm";
            System.out.format(input + " 时间不匹配,应该是某个月的第 %1$terd 天", c);
        }
    

    粗看一下没什么问题,但是我们的input中包含了格式化信息,最后输出结果:

     07 时间不匹配,应该是某个月的第 27rd 天
    

    变相的,我们获取到了系统内部的信息,在某些情况下面,可能会暴露系统的内部逻辑。

    上面的例子我们应该将input也作为一个参数,如下所示:

        public void rightFormat(){
            Calendar c = new GregorianCalendar(2020, GregorianCalendar.JULY, 27);
            String input=" %1$tm";
            System.out.format("%s 时间不匹配,应该是某个月的第 %terd 天",input, c);
        }
    

    输出结果:

     %1$tm 时间不匹配,应该是某个月的第 27rd 天
    

    小心使用Runtime.exec()

    我们知道Runtime.exec()使用来调用系统命令的,如果有恶意的用户调用了“rm -rf /”,一切的一切都完蛋了。

    所以,我们在调用Runtime.exec()的时候,一定要小心注意检测用户的输入。

    看下面的一个例子:

        public void wrongExec() throws IOException {
            String dir = System.getProperty("dir");
            Runtime rt = Runtime.getRuntime();
            Process proc = rt.exec(new String[] {"sh", "-c", "ls " + dir});
        }
    

    上面的例子中,我们从系统属性中读取dir,然后执行了系统的ls命令来查看dir中的内容。

    如果有恶意用户给dir赋值成:

    /usr & rm -rf /
    

    那么系统实际上执行的命令就是:

    sh -c 'ls /usr & rm -rf /'
    

    从而导致恶意的删除。

    解决上面的问题也有几个方法,第一个方法就是对输入做个校验,比如我们只运行dir包含特定的字符:

        public void correctExec1() throws IOException {
            String dir = System.getProperty("dir");
            if (!Pattern.matches("[0-9A-Za-z@.]+", dir)) {
                // Handle error
            }
            Runtime rt = Runtime.getRuntime();
            Process proc = rt.exec(new String[] {"sh", "-c", "ls " + dir});
        }
    

    第二种方法就是使用switch语句,限定特定的输入:

        public void correctExec2(){
            String dir = System.getProperty("dir");
            switch (dir){
                case "/usr":
                    System.out.println("/usr");
                    break;
                case "/local":
                    System.out.println("/local");
                    break;
                default:
                    break;
            }
        }
    

    还有一种就是不使用Runtime.exec()方法,而是使用java自带的方法。

    正则表达式的匹配

    在正则表达式的构建过程中,如果使用用户自定义输入,同样的也需要进行输入校验。

    考虑下面的正则表达式:

    (.*? +public\[\d+\] +.*<SEARCHTEXT>.*)
    

    上面的表达式本意是想在public[1234]这样的日志信息中,搜索用户的输入。

    但是用户实际上可以输入下面的信息:

    .*)|(.*
    

    最终导致正则表达式变成下面的样子:

    (.*? +public\[\d+\] +.*.*)|(.*.*)
    

    从而导致匹配所有的日志信息。

    解决方法也有两个,一个是使用白名单,判断用户的输入。一个是使用Pattern.quote()来对恶意字符进行转义。

    本文的代码:

    learn-java-base-9-to-20/tree/master/security

    本文已收录于 http://www.flydean.com/java-security-code-line-input/

    最通俗的解读,最深刻的干货,最简洁的教程,众多你不知道的小技巧等你来发现!

    欢迎关注我的公众号:「程序那些事」,懂技术,更懂你!

    展开全文
  • Struts2学习笔记之输入校验

    千次阅读 2012-09-01 21:53:51
    第十一记:struts2输入校验 注:action内针对所有方法或指定方法名的校验。如果有验证方法必须在struts.xml中设置input视图,当未通过验证返回名称为input的视图 1、struts2的输入校验方式  方式一:采用手工编码...

    Struts2学习笔记

    第十一记:struts2输入校验

    注:action内针对所有方法或指定方法名的校验。如果有验证方法必须在struts.xml中设置input视图,当未通过验证返回名称为input的视图

    1、struts2的输入校验方式

      方式一:采用手工编码实现

      方式二:基于XML配置实现

    2、采用手工编码实现 

      2-1、编写JSP表单输入:change.jsp

      <from action="${pageContext.request.contextPath}/person/person_save.action"method="post">

       用户名:<input name="username" type="text"/>

      手机号:<input name="mobile"type="text"/>

      <input  type="submit"value="提交"/>

      </from>

      2-2、编写Action的方法

        该action继承自ActionSupport类,并且需要重写validate方法。

       public  class PersonAction extends ActionSupport{

               private  String username;

               private  String mobile;

               public String getUsername(){
                      return this.message;
               }
              public void setUsername(String username){
                     this.username=username;
              }

              public String getMobile(){
                      return this.mobile;
               }
              public void setMobile(String mobile){
                     this.mobile=mobile;
              }

             publicString  save( ){
                        ActionContext.getContext.put("message","保存成功!");

                        return "message";
              }

             public String  update( ){
                        ActionContext.getContext.put("message","更新成功!");

                         return "message";
              }

            @override//此方法会对action中的所有方法进行校验

             public  void   validate(){

                     if(this.username==null||"".equals(this.username.trim())){

                          this.addFieldError("username","用户名不能为空");

                    }

                    if(this.mobile==null||"".equals(this.username.trim())){

                           this.addFieldError("mobile","手机号不能为空");

                   }else{

                          if(!Pattern.compile("^1[358]\\d${9}")).matcher(this.mobile).method()){

                                    this.addFieldError("mobile","手机号格式不正确");

                          }

                   }

             }

      }

       2-3、导入struts标签库并设置错误结果显示标签

         <%@  taglib  uri="struts-tags"  prefix="s" %>

       在表单外部或者内部添加错误显示标签:<s:fielderror />

      2-4、修改struts.xml文件

    <package name="person" namespace="/person" extends="struts default">

        <action   name="person_*" class="com.struts.action.PersonAction">

                 <result  name="input">/WEB-INF/page/change.jsp</result>

                 <result  name="message">/WEB-INF/page/message.jsp</result>

        </action>

        </package>

      2-5、控制指定方法的校验

        规则:名称如validateXxx的方法表示对xxx方法的校验。

       如果将validate方法改为validateSave则只能对save方法进行校验。

      2-6、校验过程梳理

          2-6-1、类型转换:对action对象的属性赋值

          2-6-2、检测类型转换异常,如果发现则通过ActionContext和ConversionError对象添加异常信息到fieldErrors对象

          2-6-3、执行validateXxx()方法。

          2-6-4、执行validate()方法。

          2-6-5、读取fieldErrors对象,如果不为空则转到Input视图,否则执行action操作。

      注:这里发生的错误多半是类型转换。

    3、XML配置校验

    3-1、验证文件的命名和验证规则

    实现action类同样需要继承自ActionSupport,需要验证的action的配置文件于struts.xml都在src目录下,并且该xml验证文件的名称是ActionName-validation.xml

    "*-validation.xml"是固定写法;*是action的名称,如PersonAction的验证文件是PersonAction-validation.xml.

    xwork目录下路径;com.opensymphony.xwork2.validator.validators有个default.xml文件提供了基本数据验证的默认验证。

    default.xml的配置如下所示:

    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE validators PUBLIC
    "-//OpenSymphony Group//XWork Validator Config 1.0//EN"
      "http://www.opensymphony.com/xwork/xwork-validator-config-1.0.dtd">
    <!-- START SNIPPET: validators-default -->
    <validators>
        <validator name="required" class="com.opensymphony.xwork2.validator.validators.RequiredFieldValidator"/>
        <validator name="requiredstring" class="com.opensymphony.xwork2.validator.validators.RequiredStringValidator"/>
        <validator name="int" class="com.opensymphony.xwork2.validator.validators.IntRangeFieldValidator"/>
        <validator name="long" class="com.opensymphony.xwork2.validator.validators.LongRangeFieldValidator"/>
        <validator name="short" class="com.opensymphony.xwork2.validator.validators.ShortRangeFieldValidator"/>
        <validator name="double" class="com.opensymphony.xwork2.validator.validators.DoubleRangeFieldValidator"/>
        <validator name="date" class="com.opensymphony.xwork2.validator.validators.DateRangeFieldValidator"/>
        <validator name="expression" class="com.opensymphony.xwork2.validator.validators.ExpressionValidator"/>
        <validator name="fieldexpression" class="com.opensymphony.xwork2.validator.validators.FieldExpressionValidator"/>
        <validator name="email" class="com.opensymphony.xwork2.validator.validators.EmailValidator"/>
        <validator name="url" class="com.opensymphony.xwork2.validator.validators.URLValidator"/>
        <validator name="visitor" class="com.opensymphony.xwork2.validator.validators.VisitorFieldValidator"/>
        <validator name="conversion" class="com.opensymphony.xwork2.validator.validators.ConversionErrorFieldValidator"/>
        <validator name="stringlength" class="com.opensymphony.xwork2.validator.validators.StringLengthFieldValidator"/>
        <validator name="regex" class="com.opensymphony.xwork2.validator.validators.RegexFieldValidator"/>
        <validator name="conditionalvisitor" class="com.opensymphony.xwork2.validator.validators.ConditionalVisitorFieldValidator"/>
    </validators>
    <!-- END SNIPPET: validators-default -->

    -校验规则:
    required:必填校验器
    requiredstring:必填字符串校验器
    int:整数校验器
    double:双精度浮点数校验器
    date:日期校验器
    expression:表达式校验器
    fieldexpression:字段表达式校验器
    email:电子邮件校验器
    url:网址校验器
    visitor:Visitor校验器
    conversion:转换校验器
    stringlength:字符串长度校验器
      regex:正则表达式校验器

    3-2、struts2例子提供的配置校验的编写示例
    路径:/struts_2.2.1.1/apps/blank/src/main/resources/example/login-validation.xml
    <!DOCTYPE validators PUBLIC
    "-//OpenSymphony Group//XWork Validator 1.0.2//EN"
             "http://www.opensymphony.com/xwork/xwork-validator-1.0.2.dtd"> 
    <validators>
          <field name="username"> 
                <field-validator type="requiredstring"> 
                    <message key="requiredstring"/> 
             </field-validator> 
           </field> 
           <field name="password"> 
                  <field-validator type="requiredstring"> 
                       <message key="requiredstring"/> 
               </field-validator> 
            </field> 
    </validators>


    3-3、编写自己的验证文件

    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE validators PUBLIC "-//OpenSymphony Group//XWork Validator 1.0.2//EN"
    "http://www.opensymphony.com/xwork/xwork-validator-1.0.2.dtd">
     <validators>

      <!-- 验证用户名是否合法 -->
         <field name="username">
             <field-validator type="requiredstring">
             <param name="trim">true</param>
             <message>请填写用户名</message>
          </field-validator>
         <field-validator type="stringlength"> 
              <param name="minLength">4</param>
             <param name="maxLength">32</param> 
             <message>用户名长度应在4到32个字符间</message> 
       </field-validator>
    </field>

    <!-- 验证密码是否合法 -->
       <field name="password">
          <field-validator type="requiredstring">
              <message>请填写密码</message>
        </field-validator>
         <field-validator type="stringlength"> 
            <param name="minLength">6</param>
            <param name="maxLength">32</param> 
             <message>为了您账号的安全,请设置6个字母以上的密码(最长可设置32个字母)</message> 
        </field-validator>
    </field>

    <!-- 验证手机号是否合法 -->
    <validators>
       <field name="user">
         <field-validator type="regex">
            <param name="expression_r"><![CDATA[^1[358]\d{9}$]]></param>
            <message>不是合法的手机号</message>
        </field-validator>
       </field>
    </validators>

    </validators>

    3-4、常用的验证配置
    3-4-1、必填检验

    <validators>
         <field name="username">
           <field-validator type="required">
                 <message>指定检验失败的提示信息</message>
           </field-validator>
        </field>
    </validators>

    3-4-2、必填字符串检验
    <validators>
       <field name="username">
             <field-validator type="requiredstring">
                    <param name="trim">true</param>
                  <message>指定检验失败的提示信息</message>
            </field-validator>
        </field>
    </validators>
    3-4-3、整数检验器/浮点检验
    <validators>
        <field name="age">
           <field-validator type="int">
               <param name="min">1</param>
              <param name="max">150</param>
              <message>年纪必须在1到150之间</message>
           </field-validator>
        </field>
    </validators>
    3-4-4、日期检验
    <validators>
     <field name="birth">
         <field-validator type="date">
             <param name="min">1900-01-01</param>
             <param name="max">2050-02-21</param>
            <message key="birth.range"/>
        </field-validator>
     </field>
    </validators>
    3-4-5、字段表达式检验器(要求指定字段满足一个逻辑表达式

    <validators>
        <field name="re_pass">
            <field-validator type="fieldexpression">
            <!--指定逻辑表达式 -->
                 <param name="expression"> (pass eq re_pass)</param>
                 <message>密码必须和确认密码相等</message>
           </field-validator>
         </field>
    </validators>
    3-4-6、邮件地址校验
    <validators>
      <field name="email">
           <field-validator type="email">
              <message>你的电子邮件地址必须是一个有效的电邮地址</message>
            </field-validator>
       </field>
    </validators>
    3-4-7、网址检验
    <validators>
        <field name="url">
            <field-validator type="url">
                 <message>你的主页地址必须是一个有效的网址</message>
           </field-validator>
        </field>
    </validators>
    3-4-8、字符串长度检验
    <validators>
       <field name="user">

           <field-validator type="stringlength">
              <param name="minlength">4</param>
             <param name="maxlength">20</param>
             <message>你的用户名长度必须在4到20之间</message>
          </field-validator>
       </field>
    </validators>
    3-4-9、正则表达式检验
    <validators>
       <field name="user">
         <field-validator type="regex">
            <param name="expression_r"><![CDATA[(\w{4,25})]]></param>
            <message>您输入的用户名只能是字母和数组,且长度必须在4到25之间</message>
        </field-validator>
       </field>
    </validators>
    3-5、配置指定方法的校验
    文件命名规则:ActionClassName-ActonName-validation.xml
    如在PersionAction中访问update的方法验证,则可以写成:
    PersonAction-person_update-validation.xml
    struts.xml的配置如下:
    <action name="person_*" class="com.struts.action.PersonAction">
    <result name="input">/WEB-INF/page/change.jsp</result><!-- 验证失败返回该页面 -->
    <result name="message">/WEB-INF/page/message.jsp</result><!-- 成功转到页面 -->
    ...</action>

    注意:所有方法的校验和指定方法的校验同时存在的时候,方法验证会合并然后执行,对于同样的方法
    执行后面那个,前面的被覆盖。
    展开全文
  • 基于XML配置方式实现输入校验

    千次阅读 2012-04-24 00:25:15
    Action类需要继承ActionSupport,然后提供校验文件,如下: ...在这个校验文件中,action中字符串类型的username属性进行验证,首先要求调用trim()方法去掉空格,然后判断用户名是否为空。该文件需
    Action类需要继承ActionSupport,然后提供校验文件,如下:


    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE validators PUBLIC "-//OpenSymphony Group//XWork Validator 1.0//EN" "http://www.opensymphony.com/xwork/xwork-validator-1.0.dtd">
    <validators>
        <field name="username">
            <field-validator type="requiredstring">
                <param name="trim">true</param>
                <message>用户名不能为空!</message>
            </field-validator>
        </field>
    </validators>


    在这个校验文件中,对action中字符串类型的username属性进行验证,首先要求调用trim()方法去掉空格,然后判断用户名是否为空。该文件需要和action类放在同一个包下,文件的取名应遵守ActionClassName-validation.xml规则,其中ActionClassName为action的简单类名,-validation为固定写法。如果Action类为cn.itcast.action.UserAction,那么该文件的取名应为:UserAction-validation.xml。

    <field name="username">
            <field-validator type="requiredstring">
                <param name="trim">true</param>
                <message>用户名不能为空!</message>
            </field-validator>
    </field>
    <field>指定action中要校验的属性,<field-validator>指定校验器,<message>为校验失败后的提示信息,如果需要国际化,可以为message指定key属性,key的值为属性文件中的key。


    上面指定的校验器requiredstring是由系统提供的,系统提供了能满足大部分验证需求的校验器,这些校验器的定义可以在xwork-2.x.jar中的com.opensymphony.xwork2.validator.validators下的default.xml中找到。



    系统提供的校验器如下:
    required (必填校验器,要求field的值不能为null)
    requiredstring (必填字符串校验器,要求field的值不能为null,并且长度大于0,默认情况下会对字符串去前后空格)
    stringlength(字符串长度校验器,要求field的值必须在指定的范围内,否则校验失败,minLength参数指定最小长度,maxLength参数指定最大长度,trim参数指定校验field之前是否去除字符串前后的空格)
    regex(正则表达式校验器,检查被校验的field是否匹配一个正则表达式.expression参数指定正则表达式,caseSensitive参数指定进行正则表达式匹配时,是否区分大小写,默认值为true)
    int(整数校验器,要求field的整数值必须在指定范围内,min指定最小值,max指定最大值)
    double(双精度浮点数校验器,要求field的双精度浮点数必须在指定范围内,min指定最小值,max指定最大值)
    fieldexpression(字段OGNL表达式校验器,要求field满足一个ognl表达式,expression参数指定ognl表达式,该逻辑表达式基于ValueStack进行求值,返回true时校验通过,否则不通过)
    email(邮件地址校验器,要求如果field的值非空,则必须是合法的邮件地址)
    url(网址校验器,要求如果field的值非空,则必须是合法的url地址)
    date(日期校验器,要求field的日期值必须在指定范围内,min指定最小值,max指定最大值)
    conversion(转换校验器,指定在类型转换失败时,提示的错误信息)
    visitor(用于校验action中的复合属性,它指定一个校验文件用于校验复合属性中的属性)
    expression(OGNL表达式校验器,expression参数指定ognl表达式,该逻辑表达式基于ValueStack进行求值,返回true时校验通过,否则不通过,该校验器不可用在字段校验器风格的配置中)


    required  必填校验器
    <field-validator type="required">
           <message>性别不能为空!</message>
    </field-validator>


    requiredstring  必填字符串校验器
    <field-validator type="requiredstring">
           <param name="trim">true</param>
           <message>用户名不能为空!</message>
    </field-validator>


    stringlength:字符串长度校验器
    <field-validator type="stringlength">
    <param name="maxLength">10</param>
    <param name="minLength">2</param>
    <param name="trim">true</param>
    <message><![CDATA[产品名称应在1-10个字符之间]]></message>
    </field-validator>


    int:整数校验器
    <field-validator type="int">
    <param name="min">1</param>
    <param name="max">150</param>
    <message>年龄必须在1-150之间</message>
    </field-validator>


    字段OGNL表达式校验器
    <field name="imagefile">
    <field-validator type="fieldexpression">
    <param name="expression"><![CDATA[imagefile.length() > 0]]></param>
    <message>文件不能为空</message>
    </field-validator>
    </field>



    email:邮件地址校验器
    <field-validator type="email">
    <message>电子邮件地址无效</message>
    </field-validator>


    regex:正则表达式校验器
    <field-validator type="regex">
         <param name="expression"><![CDATA[^13\d{9}$]]></param>
         <message>手机号格式不正确!</message>
    </field-validator>


    当校验文件的取名为ActionClassName-validation.xml时,会对 action中的所有处理方法实施输入验证。如果你只需要对action中的某个处理方法实施验证,那么,校验文件的取名应为:ActionClassName-ActionName-validation.xml,其中ActionName为struts.xml中为action配置的名称。例如:在实际应用中,常有以下配置:
    <action name="user_*" class="cn.itcast.action.UserAction" method="{1}">
    <result name="success">/WEB-INF/page/message.jsp</result>
    <result name="input">/WEB-INF/page/addUser.jsp</result>
    </action>
    UserAction中有以下两个处理方法:
    public String add() throws Exception{
       ....
    }
    public String update() throws Exception{
       ....
    }
    要对add()方法实施验证,校验文件的取名为: UserAction-user_add-validation.xml
    要对update()方法实施验证,校验文件的取名为: UserAction-user_update-validation.xml


    当为某个action提供了ActionClassName-validation.xml和ActionClassName-ActionName-validation.xml两种规则的校验文件时,系统按下面顺序寻找校验文件:
    1。AconClassName-validation.xml
    2。ActionClassName-ActionName-validation.xml
    系统寻找到第一个校验文件时还会继续搜索后面的校验文件,当搜索到所有校验文件时,会把校验文件里的所有校验规则汇总,然后全部应用于处理方法的校验。如果两个校验文件中指定的校验规则冲突,则只使用后面文件中的校验规则。


    当action继承了另一个action,父类action的校验文件会先被搜索到。假设UserAction继承BaseAction, UserAction在struts.xml的配置如下:
    <action name="user" class="cn.itcast.action.UserAction" method="{1}">
    .....
    </action>
    访问上面名为user的action,系统先搜索到BaseAction-validation.xml, BaseAction-user-validation.xml,接着搜索到UserAction-validation.xml, UserAction-user-validation.xml。校验规则是这四个文件的总和。

    展开全文
  • Struts2 类型转换和数据校验

    千次阅读 2017-06-12 06:23:33
    学习内容Ø Struts 2类型转换Ø Struts 2数据校验能力目标Ø 熟悉Struts 2自带类型转换器Ø 能自定义类型转换器Ø 自定义输入校验功能Ø 熟悉Struts 2内置校验器本章简介Struts 2提供了功能强大的类型转换器来...
  • 校验数据完整性

    千次阅读 2020-07-16 10:09:50
    所有的模块的输入都需要进行数据完整性校验,需要增加如下的额外字段, 名称 字段 类型 是否必须 数据校验码 sign String 必须 ...
  • SpringMVC集成Hibernate Validator进行注解式的参数校验 ——让代码更少、更加专注于业务逻辑 1 问题背景:参数验证是一个...但是无论是前端还是后台,都需用户输入进行验证,以此来保证系统数据的正确性。对于web
  • CRC校验

    千次阅读 2014-03-28 10:37:24
    循环冗余校验(英语:Cyclic redundancy check,通称“CRC”)是一种根据网络数据数据包或计算机文件等数据产生简短固定位数校验码的一种散列函數,主要用来检测或校验数据传输或者保存后可能出现的错误。...
  • 参数校验的多种方式

    千次阅读 2019-09-08 14:31:03
    参数校验的几种方式 如果默认的字段类型和选项不能满足需求,需要再补充校验行为,可以使用以下...validate方法:多个字段进行比较校验 一、通过 validators选项校验 在序列化器字段中添加validators选项参数进行...
  • Validator接口校验与全局异常处理器

    千次阅读 2019-11-10 22:24:04
    上一篇日志使用Bean Validation校验机制,基本数据类型进行校验,方法是在实体类属性上使用注解标识校验方式,最后在Controller类中具体方法的形参里添加@Vlidated注解。Bean Validation校验有一个缺点是,我们的...
  • -Writing secure code 文章的开头所引用的《Writing Secure Code》的名言:“所有的输入都是罪恶的”,所以我们应该所有的外部输入进行校验。而表单是应用程序最简单的入口,其传进来的数据,我们必须进行校验...
  • 几种常用的数据校验方式

    万次阅读 2016-11-13 20:05:11
    我们知道数据在传输过程中,可能会存在数据出错的情况。...定义:根据被传输的一组二进制代码中“1”的个数是奇数或偶数来进行校验。 使用:通常专门设置一个奇偶校验位,存放代码中“1”的个数为奇数
  • 在项目中经常会用户输入的数据,或者外部导入的数据做合法性检查。在spring boot框架的服务中可以使用invalidator注解数据做合法性,安全性做校验。下面给一个样例说明如何自定注解实现校验逻辑。 一、定义校验...
  • 网络上有许多成熟的插件供使用者参考,插件就是将jquery实现的常用操作进行封装,封装后的小框架就可以叫做插件,按照插件的语法去操作可以实现很多复杂的功能,而这些复杂功能的背后实现我们可以不必懂。...
  • jQuery formValidator表单校验

    千次阅读 2012-11-27 14:30:14
    jQuery formValidator表单校验插件ver2.9.1介绍和在线演示 jQuery formValidator表单校验插件 插件目前提示错误,有两种模式:showword和showalert,即文字提示和窗口提示 目前支持5种大的校验方式,...
  • 用户的输入的数据进行安全验证

    千次阅读 2012-05-15 10:55:51
    一个基本的错误就是没有合理的进行全局变量的初始化。最好是把php.ini中的配置‘register_globals’的值设置为off(从php4.2开始默认关闭)以便避免类似错误的发生,但你仍然要注意此类问题。 1.2跨站运行脚本 ...
  • Java通过XML Schema校验XML

    千次阅读 2017-08-22 21:22:47
    Java通过XML Schema校验XML   XML的校验在XML处理中非常常见,如果没有有效的办法来校验XML的合法性,往往会导致很多问题。XML的校验是通过XML Schema(XSD) 或DTD文件的语法规范来校验的。原理是通过读取解析...
  • Java应用中的数据校验

    千次阅读 2018-10-23 18:11:28
    翻译:吴嘉俊 ,叩丁狼高级...我接触到的很多项目中,数据校验这方面内容都没有一个很明确的策略。这些团队常常面对即将临近的交付期压力,不明确的项目续期,所以根本没有太多时间来规划和实现项目中的校验策略...
  • STM32 SPI对外部FLASH的访问(转载)

    万次阅读 2015-07-08 12:29:55
    SPI总线四种工作方式 SPI 模块为了和外设进行数据交换,根据外设工作要求,其输出串行同步时钟极性和相位可以进行配置,时钟极性(CPOL)传输协议没有重大的影响。如果CPOL=0,串行同步时钟的空闲状态为低电平;...
  • Struts 的数据校验和验证框架

    千次阅读 2013-10-14 12:43:31
    Struts 2 的数据校验   对于一个web应用而言,所有的用户数据都...异常输入,轻则导致系统非正常中断,重则导致系统崩溃,应用程序化必须能正确表现层接收的异常数据,通常的做法是遇到异常数输入时应用程序直接返回
  • 物料需求计划MRP——外部采购(MM)——货仓管理——发票校验——销售与分销(SD) 物料需求计划MRP——自制生产(PP)——货仓管理——销售与分销(SD) 涉及到的主数据有:物料、批次、供应商、总账科目、客户、...
  • java方法参数校验实践

    千次阅读 2013-01-30 21:13:14
    在 spring 的validation 验证框架还没有发布出来,怎么很优雅地参数合法性做校验呢 ? 有两种时间方式: (1) result = method1(); if (result is error){ //根据返回结果判断是否退出 ...//加错误码 ...
  • 目前支持5种大的校验方式,分别是:InputValidator(针对input、textarea、select控件的字符长度、值范围、选择个数的控制)、CompareValidator(提供2个对象的比较,目前可以比较字符串和数值型)、AjaxValidator...
  • Java调用Schema校验xml文件

    千次阅读 2017-04-14 17:40:31
    最近项目用到了xml文件传输(系统与系统之间)并用schema校验XML 特此做下记录: ** 自己写了一个工具类public class XmlValidateUtil { private static final Log logger = LogFactory.getLog(XmlValidateUtil....
  • 循环冗余校验(CRC)

    千次阅读 2009-05-26 22:25:00
    循环冗余校验(CRC)是根据如网络数据包或者计算机文件块这样的数据生成少数固定数目数据位的一种散列函数。校验和用来检测数据传输或者存储后可能出现的错误。CRC 在传输或者储存之前计算出来并且附加到数据后面,...
  • 1. onfocus:当用户鼠标移动到输入框中时候, 请给用户一个提示。 2. onblur:当用户鼠标移开时候, 校验一下用户输入。 3. onkeyup:当用户按键输入抬起的时候, 校验一下用户输入
  • XML的校验方式

    千次阅读 2011-06-14 19:53:00
    为了使得SGML显得用户友好,XML重新定义了SGML的一些内部值和参数,去掉了大量的很少用到的功能,这些繁杂的功能使得SGML在设计网站显得复杂化。XML保留了SGML的结构化功能,这样就使得网站设计者可以定义自己的...
  • 接口的权限控制、登陆校验...首先,在看到这些需求的时候,要在配置文件里面进行配置白名单,之后读取白名单的配置文件获取到白名单的列表,这样就可以拿到了那写接口不需要判断。 其次,要做一个拦截器,在每一...
  • AntDesign Form表单字段校验的三种方式

    千次阅读 2018-12-18 14:07:00
    1.使用getFieldDecorator的rules规则 最简单的方法就是使用getFieldDecorator...rules中定义校验规则,message为校验不通过的提示文字。 {getFieldDecorator('inputContent', { rules: [{ required: true,...
  • 使用JS完成注册页面表单简单校验

    千次阅读 2018-01-22 19:12:36
    首先看下结构目录: ...此处只是用到了目录:img和01_使用JS完成注册...由于只是前端校验,没有涉及后端验证,所以并无与后端交互,只用了HBuilder工具开发 代码如下: 注册页面 function checkFor

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 51,755
精华内容 20,702
关键字:

对外部输入进行校验时