All Downloads are FREE. Search and download functionalities are using the official Maven repository.

javax.security.jacc.URLPatternSpec Maven / Gradle / Ivy

The newest version!
/*
 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
 *
 * Copyright (c) 1997-2013 Oracle and/or its affiliates. All rights reserved.
 *
 * The contents of this file are subject to the terms of either the GNU
 * General Public License Version 2 only ("GPL") or the Common Development
 * and Distribution License("CDDL") (collectively, the "License").  You
 * may not use this file except in compliance with the License.  You can
 * obtain a copy of the License at
 * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
 * or packager/legal/LICENSE.txt.  See the License for the specific
 * language governing permissions and limitations under the License.
 *
 * When distributing the software, include this License Header Notice in each
 * file and include the License file at packager/legal/LICENSE.txt.
 *
 * GPL Classpath Exception:
 * Oracle designates this particular file as subject to the "Classpath"
 * exception as provided by Oracle in the GPL Version 2 section of the License
 * file that accompanied this code.
 *
 * Modifications:
 * If applicable, add the following below the License Header, with the fields
 * enclosed by brackets [] replaced by your own identifying information:
 * "Portions Copyright [year] [name of copyright owner]"
 *
 * Contributor(s):
 * If you wish your version of this file to be governed by only the CDDL or
 * only the GPL Version 2, indicate your decision by adding "[Contributor]
 * elects to include this software in this distribution under the [CDDL or GPL
 * Version 2] license."  If you don't indicate a single choice of license, a
 * recipient has the option to distribute your version of this file under
 * either the CDDL, the GPL Version 2 or to extend the choice of license to
 * its licensees as provided above.  However, if you add GPL Version 2 code
 * and therefore, elected the GPL Version 2 license, then the option applies
 * only if the new code is made subject to such option by the copyright
 * holder.
 */

package javax.security.jacc;

import java.util.Arrays;

/**
 * This class extends the URLPattern class and is used to represent 
 * URLPatternSpec objects.
 * URLPatternSpec objects occur within WebResourcePermission and 
 * WebUserDataPermission objects.
 * 
 * 

* * @author Ron Monzillo * @author Gary Ellison */ class URLPatternSpec extends URLPattern { private static String EMPTY_STRING = ""; private transient int hashCodeValue = 0; private String canonicalSpec = null; private final String urlPatternList; private URLPattern[] urlPatternArray = null; /** * Creates a new URLPatternSpec that identifies the web * resources to which a WebResourcePermission or WebUserDataPermission * applies. The syntax of the name * parameter is as follows: *

     *
     *          URLPatternList ::= URLPattern | URLPatternList colon URLPattern
     *
     *          URLPatternSpec ::= URLPattern | URLPattern colon URLPatternList
     *
     *          name ::= URLPatternSpec
     * 

* The first URLPattern in a URLPatternSpec may be any of the pattern * types, exact, path-prefix, extension, or default as defined in the * Java Servlet Specification). When a URLPatternSpec includes * a URLPatternList, the patterns of the URLPatternList identify the * resources to which the permission does NOT apply and depend on the * pattern type and value of the first pattern as follows:

*

    *
  • No pattern may exist in the URLPatternList that matches the * first pattern. *
  • If the first pattern is a path-prefix * pattern, only exact patterns matched by the first pattern * and path-prefix patterns matched by, but different from, * the first pattern may occur in the URLPatternList. *
  • If the first pattern is an extension * pattern, only exact patterns that are matched by the first * pattern and path-prefix patterns may occur in the URLPatternList. *
  • If the first pattern is the default pattern, "/", any pattern * except the default pattern may occur in the URLPatternList. *
  • If the first pattern is an exact pattern a URLPatternList must not * be present in the URLPatternSpec. *
*

* @param urlPatternSpec a String containing a URLPatternSpec * that identifies the application * specific web resources to which the permission pertains. * All URLPatterns in the URLPatternSpec are relative to the context path * of the deployed web application module, and the same URLPattern must not * occur more than once in a URLPatternSpec. */ public URLPatternSpec(String urlPatternSpec) { super(getFirstPattern(urlPatternSpec)); int colon = urlPatternSpec.indexOf(":"); if (colon >= 0) { urlPatternList = urlPatternSpec.substring(colon+1); setURLPatternArray(); } else urlPatternList = null; } /** * This method returns a String containing the first URLPattern in * this URLPatternSpec. */ public String getURLPattern() { return super.toString(); } /* * Checks two URLPatternSpec objects for equality. * A reference URLPatternSpec is equivalent to an argument URLPatternSpec * if their first patterns are equivalent, and the patterns of its * URLPatternList collectively match exactly the same set of * patterns as are matched by the patterns of the URLPatternList of the * argument URLPatternSpec. */ public boolean equals(Object o) { if (o == null || ! (o instanceof URLPatternSpec)) return false; URLPatternSpec that = (URLPatternSpec) o; return this.toString().equals(that.toString()); } /** * Returns the hash code value for this URLPatternSpec * properties of the returned hash code must be as follows:

*

    *
  • During the lifetime of a Java application, the hashCode method * must return the same integer value, every time it is called on a * URLPatternSpec object. The value returned by hashCode for a * particular URlPatternSpec need not remain consistent from * one execution of an application to another. *
  • If two URLPatternSpec objects are equal according to the * equals method, then calling the hashCode method on each of the two * objects must produce the same integer result (within an * application). *
*

* @return the integer hash code value for this object. */ public int hashCode() { if (hashCodeValue == 0) hashCodeValue = this.toString().hashCode(); return hashCodeValue; } /** * Determines if the argument URLPatternSpec is "implied by" this * URLPatternSpec. For this to be the case, all of the following must * be true:

*

    *
  • The argument is an instanceof URLPatternSpec, and *
  • The first Pattern in the argument URLPatternSpec * is matched by the first URLPattern of this URLPatternSpec. *
  • The first Pattern in the argument URLPatternSpec * is NOT matched by any URLPattern in the URLPatternList * of this URLPatternSpec. *
  • If the first Pattern in the argument URLPatternSpec matches * the first Pattern in this URLPatternSpec, then every URLPattern * in the URLPatternList of this URLPatternSpec is matched by * a URLPattern in the URLPatternList of the argument URLPatternSpec. *
*

* URLPattern matching is performed using the Servlet matching * rules where two URL patterns match if they are related as follows: *

    *
  • their pattern values are String equivalent, or *
  • this pattern is the path-prefix pattern "/*", or *
  • this pattern is a path-prefix pattern (that is, it starts with * "/" and ends with "/*") and the argument pattern starts with the * substring of this pattern, minus its last 2 characters, and the * next character of the argument pattern, if there is one, is "/", or *
  • this pattern is an extension pattern (that is, it starts with * "*.") and the argument pattern ends with this pattern, or *
  • the reference pattern is the special default pattern, "/", * which matches all argument patterns. *
*

* All of the comparisons described above are case sensitive. *

* @param that "this" URLPatternSpec is checked to see if * it implies the argument URLPatternSpec. *

* @return true if the specified URLPatternSpec is implied by this * URLPatternSpec, false if not. */ public boolean implies(URLPatternSpec that) { if (that == null) return false; if (!super.implies(that)) return false; for (int i=0; urlPatternArray != null && i 0) return urlPatternSpec.substring(0,colon); else if (colon == 0) return EMPTY_STRING; throw new IllegalArgumentException("Invalid URLPatternSpec"); } private void setURLPatternArray() { if (urlPatternArray == null && urlPatternList != null) { String[] tokens = urlPatternList.split(":",-1); int count = tokens.length; if (count == 0) throw new IllegalArgumentException ("colon followed by empty URLPatternList"); urlPatternArray = new URLPattern[count]; int firstType = this.patternType(); for (int i=0; i





© 2015 - 2024 Weber Informatics LLC | Privacy Policy