如何使用正则表达式检查java中的cookie的有效性

时间:2016-09-21 04:04:28

标签: java regex validation cookies

我有一个关于java验证cookie的问题。我经历了RFC standards for internet cookie 教程并查看预定义的正确语法。现在我有一些带有一些cookie示例的java代码,我想应用正则表达式来判断给定的cookie是否有效。下面是我的代码和我申请的正则表达式:

代码段:

    import java.util.regex.Matcher;
    import java.util.regex.Pattern;



    public class CheckValidity

     {
        public static boolean IsValid(String mycookie)

      {
        boolean valid = false;
        String pattern="^Set-Cookie:\\s\\*?\\=\\*?\\;\\^Expires=\\^Path=\\^Domain=.*\\^Max-Age=[1-9]\\d*$\\HttpOnly";
        Pattern p= Pattern.compile(pattern);
        Matcher m=p.matcher(mycookie);


        for (int k=0; k<mycookie.length();k++)

        {  

            if(m.find())
            {
                valid=true;
                return valid;
            }

            else
            {  
                valid=false;
                return valid;
            }    
        }
               return valid;
        }  


    public static void main(String[] args) {

            String [] examples = {

                                              // valid examples: 1 to 7
            "Set-Cookie: ns5=",                                                             // 1 valid: value is empty
            "Set-Cookie: ns5=\"alss/0.asdf^\"",                                             // 2 valid: name=value
            "Set-Cookie: ns5=\"alss/0.asdf^\"; Expires=Tue, 15 Jan 2006 14:24:53 GMT",      // 3 valid: Expires=arbitrary time
            "Set-Cookie: ns5=; Domain=",                                                    // 4 valid: empty domain
            "Set-Cookie: ns5=; Domain=.srv.a.com-0",                                        // 5 valid: Domain=host_name
            "Set-Cookie: ab=Asdfa; Expires=Sat, 15 Jan 2006 14:24:53 GMT; Path=/; Domain=.example.com; HttpOnly", //6 Valid
            "Set-Cookie: ns5=alss/0.asdf^; HttpOnly",                                       // 7 valid
            "Set-Cookie: ns5=alss/0.asdf^; httponly",                   // 8  invalid H and O should be capital
            "Set-Cookie:",                                              // 9  invalid empty 
            "Set-Cookie: bv",                                           // 10 invalid cookie-pair: missing '=' 
            "Set-Cookie: =alss/0.asdf^",                                // 11 invalid cookie-pair: name is empty
            "Set-Cookie: ns@5=alss/0.asdf^",                            // 12 invalid cookie-pair: name is invalid
            "Set-Cookie: ns5=alss/0.asdf^;",                            // 13 invalid redundant ';' after ^
            "Set-Cookie: ns5=; Expires=Tue 15 Jan 2006 14:24:53 GMT",   // 14 invalid Expires missing ',' after Tue
            "Set-Cookie: ns5=alss/0.asdf^; Max-Age=06",                 // 15 invalid Max-Age: starting 0
            "Set-Cookie: ns5=alss/0.asdf^; Domain=.0com",               // 16 invalid Domain: starting 0
            "Set-Cookie: ns5=alss/0.asdf^; Domain=.com-",               // 17 invalid Domain: trails non-letter-digit
            "Set-Cookie: ns5=alss/0.asdf^; Path=",                      // 18 invalid Path: empty

        };

       for (int i = 0; i < examples.length; i++)

        System.out.println(String.format("Cookie %d: %s", i+1, IsValid(examples[i]) ? " is valid" : "is invalid"));
    }

}

老实说,之前我没有使用正则表达式,所以我阅读了一些教程,然后应用了我当前的正则表达式。我认为在我的正则表达式中有一些我想念的情况,特别是ANDOR运算符,但我无法找到正确的语法。如果可能的话,你能告诉我应该如何使正则表达式符合cookie标准,并且第一到第七检索“有效”,剩下的那些“无效”。我非常感谢你的帮助。提前谢谢!

0 个答案:

没有答案